【问题标题】:Docker: Reverse Engineering of an ImageDocker:图像的逆向工程
【发布时间】:2018-06-22 00:50:10
【问题描述】:

当我们使用 Docker 时,很容易在 https://hub.docker.com 的公共存储库中推送和拉取映像,但这个存储库仅对公共映像免费(只有一个可以是私有的)。

目前可以对存储库中的公共图像执行逆向工程并读取项目的源代码吗?

【问题讨论】:

  • +1 upvote 听起来您的问题已经有了答案。但我不确定我是否理解你的问题。您的问题是担心您的图像可能会被其他人逆向工程并且您不希望这样吗?或者更确切地说,你想知道 docker 镜像里面有什么吗? - 是否应该“目前可以对存储库中的公共图像执行逆向工程并读取项目的源代码?”是“是否可以对公共 docker 镜像进行逆向工程?” - 如果这就是你要问的,这里的答案就是回答这个问题。
  • P.S.顺便说一句,在某种程度上,我想知道 hub.docker.com 上的非官方 docker 图像有什么意义,因为我自己总是想从官方而不是第 3 方那里获取我的 docker 设置,以确保安全并避免第 3 部分维护者决定不再维护。
  • 在这里也可以看到我的问题:security.stackexchange.com/questions/219924/…

标签: docker reverse-engineering dockerhub docker-image


【解决方案1】:

您可以使用docker history <image-name> --no-trunc查看图像是如何创建的

更新:

检查dive,这是一个非常好的工具,可让您查看图像层。

【讨论】:

    【解决方案2】:

    正如 yamenk 所说,docker history 是关键。

    由于https://github.com/CenturyLinkLabs/dockerfile-from-image坏了,你可以使用最近的

    https://hub.docker.com/r/dduvnjak/dockerfile-from-image/

    从网站中提取

    请注意,该脚本仅适用于本地图像中存在的图像 存储库(您在键入 docker 图像时看到的东西)。如果你想 为本地存储库中不存在的图像生成 Dockerfile 你首先需要 docker pull 它。

    例如,您可以自己再次运行它,以查看代码

    $ docker run --rm -v /run/docker.sock:/run/docker.sock centurylink/dockerfile-from-image ruby
    FROM buildpack-deps:latest
    RUN useradd -g users user
    RUN apt-get update && apt-get install -y bison procps
    RUN apt-get update && apt-get install -y ruby
    ADD dir:03090a5fdc5feb8b4f1d6a69214c37b5f6d653f5185cddb6bf7fd71e6ded561c in /usr/src/ruby
    WORKDIR /usr/src/ruby
    RUN chown -R user:users .
    USER user
    RUN autoconf && ./configure --disable-install-doc
    RUN make -j"$(nproc)"
    RUN make check
    USER root
    RUN apt-get purge -y ruby
    RUN make install
    RUN echo 'gem: --no-rdoc --no-ri' >> /.gemrc
    RUN gem install bundler
    ONBUILD ADD . /usr/src/app
    ONBUILD WORKDIR /usr/src/app
    ONBUILD RUN [ ! -e Gemfile ] || bundle install --system
    

    【讨论】:

    • docker pull devopsqa/fortify; docker run -v /var/run/docker.sock:/var/run/docker.sock --rm dduvnjak/dockerfile-from-image devopsqa/fortify 无输出
    • 在 dduvnjak github 上打开 PR
    【解决方案3】:

    您可以使用 laniksj/dfimage 对图像进行逆向工程。

    例如:

    # docker run -v /var/run/docker.sock:/var/run/docker.sock laniksj/dfimage <YOUR_IMAGE_ID>
    FROM node:12.4.0-alpine
    RUN /bin/sh -c apk update
    RUN /bin/sh -c apk -Uuv add groff less python py-pip
    RUN /bin/sh -c pip install awscli
    RUN /bin/sh -c apk --purge -v del py-pip
    RUN /bin/sh -c rm /var/cache/apk/*
    RUN /bin/sh -c apk add --no-cache curl
    ADD dir:4afc740ff29e4a32a34617d2715e5e5dc8740f357254bc6d3f9362bb04af0253 in /app
    COPY file:b57abdb61ae72f3a25be67f719b95275da348f9dfb63fb4ff67410a595ae1dfd in /usr/local/bin/
    WORKDIR /app
    RUN /bin/sh -c npm install
    ENTRYPOINT ["docker-entrypoint.sh"]
    CMD ["node" "app.js"]
    

    【讨论】:

      【解决方案4】:

      dfimagedockerfile-from-image 坏了

      dedockify 有效

      imageName=ruby:latest
      docker pull $imageName
      docker images # -> get imageId
      imageId=xxxxxxxxxxxx
      # write to Dockerfile
      docker run --rm -v /var/run/docker.sock:/var/run/docker.sock mrhavens/dedockify $imageId >Dockerfile
      

      【讨论】:

        猜你喜欢
        • 2011-03-20
        • 2010-09-10
        • 2012-08-26
        • 1970-01-01
        • 1970-01-01
        • 2012-05-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-29
        相关资源
        最近更新 更多