首页 > 其他分享 >容器镜像静态扫描原理

容器镜像静态扫描原理

时间:2023-06-11 18:44:17浏览次数:43  
标签:文件 聚合 获取 容器 扫描 漏洞 镜像

前言

有这样一个工具, 可以对镜像进行扫描, 拿出其中包含的软件包、lib库(pip包等)、危险文件等, 并能够识别出哪些包是存在漏洞的. 比如trivy工具. 那么他们是如何做到这件事情的呢?

正好最近在研究这块, 索性就简单谈一谈(其实原理很简单).

获取包含内容

对于镜像的存储, 层之间的关系, 以及如何将多层数据进行聚合, 可以看之前的这篇文章.

扫描单层软件包

扫描单层的数据, 说白了就是文件扫描. 比如:

  1. 获取系统版本
    • etc/os-release文件获取系统版本
    • etc/debian_version文件获取debian的版本
    • etc/lsb-release文件获取ubuntu版本
    • etc/alpine-release文件获取alpine的版本
  2. 获取系统包
    • lib/apk/db/installed文件获取安装的所有apk
    • var/lib/dpkg/status文件获取安装的所有dpkg
  3. 获取依赖库
    • 依据.jar后缀拿到所有jar
    • 依据go.mod文件名获取依赖的库
    • requirements.txt文件拿到依赖的pip
  4. 获取风险文件
    • 通过一些文件识别的扫描库, 可实现对恶意文件的识别. 比如yara

通过对本层所有文件的扫描, 就能够将当前层包含的信息全部拿到了.

多层合并

在拿到每一层的数据之后, 接下来就是将多层的数据进行聚合了. 软件包的聚合规则与文件的聚合规则相同. 可以回这篇文章复习一下文件是如何聚合的.

  1. 覆盖: 对于单文件内容, 上层覆盖下层, 比如:
    • 系统包. apk/dpkg等, 在信息修改后, 其对应的单位件会覆盖
  2. 合并: 将多层内容进行合并. 比如:
    • jar文件, 每层增加一个, 在最后将所有jar包合并到一起
  3. 移除: 之前说过, 当文件删除的时候, 会保留一个without文件. 因此, 当上层将下层内容删除时, 需要在最终聚合的时候去掉.

经过以上步骤, 整个镜像的完整信息就已经拿到了.

识别漏洞

如何识别漏洞呢? 就更简单了, 在本地数据库中维护一份漏洞库, 标识了某个系统的某个软件的某个版本, 存在某个漏洞. 然后拿着匹配到的结果一个一个找就行了.

总结

以上, 就是镜像的静态扫描原理了. 看完之后是不是发现特别的简单?

但其实写起来并没有想象中那么简单, 比如合并的操作就比较繁琐. 不过这里只介绍原理, 知道是怎么回事就行了.

还有一些扫描是动态扫描, 会将镜像启动, 然后通过攻击行为来判断是否存在某种漏洞. 不在本文的说明范围内.

标签:文件,聚合,获取,容器,扫描,漏洞,镜像
From: https://www.cnblogs.com/hujingnb/p/17473375.html

相关文章

  • Burp Suite Professional / Community 2023.6 (macOS, Linux, Windows) - Web 应用安
    BurpSuiteProfessional/Community2023.6(macOS,Linux,Windows)-Web应用安全、测试和扫描BurpSuiteProfessional,Test,find,andexploitvulnerabilities.请访问原文链接:https://sysin.org/blog/burp-suite-pro-2023/,查看最新版。原创作品,转载请保留出处。作者......
  • 10、Docker利用数据卷实现容器数据持久化与数据卷容器
    Docker利用数据卷实现容器数据持久化docker容器的分层容器的数据分层目录LowerDir:image镜像层,即镜像本身,只读UpperDir:容器的上层,可读写,容器变化的数据存放在此处,创建好容器,修改了数据,新生的的修改数据放在此处MergedDir:容器的文件系统,使用UnionFS(联合文件系统)......
  • SonarQube扫描C#代码
    目录用SonarQube实现什么功能?SonarLintforVisualStudio是什么?使用SonarQube扫描检测C#/.NET代码并上传到服务器一、配置MSBuild二、下载安装SonarScannerforMSBuild三、使用SonarQube分析C#代码并上传服务器Sonar系列相关参考SonarQube官网SonarQube是一款静态代码质量......
  • 清理docker镜像
    brief本地出现noneimage是由于构建过程异常导致残存的image,占用空间,或者历史imageresolvehttps://docs.docker.com/engine/reference/commandline/images/#filteringdockersystem[root@jenkins-triad~]#dockersystem--helpUsage: dockersystemCOMMANDManageD......
  • 【Podman】修改容器命令提示符
    默认情况下使用命令podmanexec-ittest-001bash进入容器显示的命令提示符是容器ID:我们希望显示的是:网上找到的修改命令:podmanexec-it-ePS1="text:\w$"text-001bash,这种方法似乎只有mac系统生效,而且不好用,最终自己摸索了一下(长久版):podmanexec-ittest-001bash......
  • 8、利用构建好的Ubuntu镜像构建Nginx镜像
    利用DockerFile文件执行dockerbuild基于基础镜像自动构建nginx镜像做的时候可以找一台宿主机边执行命令,边写Dockerfile应用级镜像一定要有一个进程是前台执行,进程存在不至于程序启动就退出CMD:容器启动命令第一步:按照业务类型或系统类型等方式划分创建目录环境,方便后期镜像比较多......
  • 使用阿里云快速构建海外镜像实战案例
    目录一.github创建项目1.注册账号2.登录github账号3.创建仓库4.添加一个Dockerfile文件二.登录阿里云创建镜像仓库1.进入容器镜像服务页面2.创建命名空间3.创建镜像仓库3.1配置仓库信息3.2配置代码源3.2.1选择代码源3.2.2绑定github账号3.2.3绑定成功3.2.4配置代码源3.2.5......
  • Docker配置完镜像加速重启失败
    systemctlstatusdocker-l●docker.service-DockerApplicationContainerEngineLoaded:loaded(/usr/lib/systemd/system/docker.service;enabled;vendorpreset:disabled)Active:failed(Result:start-limit)since六2023-06-1009:09:01CST;1m......
  • 005Arch中Docker的基本使用---容器
    外链:Docker-ArchWiki(archlinux.org)Docker容器使用|菜鸟教程(runoob.com)输出Helloworlddockerrun-it--rmarchlinuxbash-c"echohelloworld"各个参数解析:-docker:Docker的二进制执行文件-run:与前面的docker组合来运行一个容器--it:---rm:-......
  • MDT部署Windows系列 (十二): 进阶篇—制作完美的Win10 22H2系统镜像模板之移除Windows
    前言由于工作等原因(借口),距离发布上一篇MDT系列的文章已经过去一年::twemoji:sweat::上一章我记录了基于MDT如何使用一个Task即可实现制作Windows基础wim镜像+DIY基础软件+捕捉镜像。传送门有好多同学一直咨询在制作捕捉镜像的时候遇到的常见的2个问题:如何彻底的移除掉Windows10中......