macでインフォマティクス

macでインフォマティクス

NGS関連のインフォマティクス情報についてまとめています。

Dockerイメージをリバースエンジニアリングする Whaler

 

ブログで開発の動機は説明されています。 

Reversing Docker Images into Dockerfiles

https://samaritan.ai/blog/reversing-docker-images-into-dockerfiles/

 

インストール

mac os10.13のgo version go1.11 darwin/amd64でビルドした。

Go言語がないなら先に導入しておく。

Github

go get -u github.com/P3GLEG/Whaler
cd ~/go/src/github.com/P3GLEG/Whaler
go build .

> Whaler -h

$ Whaler -h

Usage of Whaler:

  -f string

    File containing images to analyze seperated by line

  -filter

    Filters filenames that create noise such as node_modules. Check ignore.go file for more details (default true)

  -sV string

    Set the docker client ID to a specific version -sV=1.36

  -v Print all details about the image

  -x Save layers to current directory

 

実行方法

分析するにはdokcerコンテナイメージ名を指定する。

Whaler image名

 

ubuntuコンテナイメージを使い試してみる。まずイメージを検索する。

sudo docker search ubuntu

 

$ sudo docker search ubuntu

NAME                                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED

ubuntu                                                 Ubuntu is a Debian-based Linux operating sys…   8426                [OK]                

dorowu/ubuntu-desktop-lxde-vnc                         Ubuntu with openssh-server and NoVNC            224                                     [OK]

rastasheep/ubuntu-sshd                                 Dockerized SSH service, built on top of offi…   171                                     [OK]

consol/ubuntu-xfce-vnc                                 Ubuntu container with "headless" VNC session…   130                                     [OK]

ansible/ubuntu14.04-ansible                            Ubuntu 14.04 LTS with ansible                   95                                      [OK]

ubuntu-upstart                                         Upstart is an event-based replacement for th…   90                  [OK]                

neurodebian                                            NeuroDebian provides neuroscience research s…   54                  [OK]                

1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5   ubuntu-16-nginx-php-phpmyadmin-mysql-5          44                                      [OK]

ubuntu-debootstrap                                     debootstrap --variant=minbase --components=m…   39                  [OK]                

nuagebec/ubuntu                                        Simple always updated Ubuntu docker images w…   23                                      [OK]

tutum/ubuntu                                           Simple Ubuntu docker images with SSH access     18                                      

i386/ubuntu                                            Ubuntu is a Debian-based Linux operating sys…   14                                      

1and1internet/ubuntu-16-apache-php-7.0                 ubuntu-16-apache-php-7.0                        13                                      [OK]

ppc64le/ubuntu                                         Ubuntu is a Debian-based Linux operating sys…   12                                      

eclipse/ubuntu_jdk8                                    Ubuntu, JDK8, Maven 3, git, curl, nmap, mc, …   6                                       [OK]

codenvy/ubuntu_jdk8                                    Ubuntu, JDK8, Maven 3, git, curl, nmap, mc, …   4                                       [OK]

darksheer/ubuntu                                       Base Ubuntu Image -- Updated hourly             4                                       [OK]

1and1internet/ubuntu-16-nginx-php-5.6-wordpress-4      ubuntu-16-nginx-php-5.6-wordpress-4             3                                       [OK]

pivotaldata/ubuntu                                     A quick freshening-up of the base Ubuntu doc…   2                                       

1and1internet/ubuntu-16-sshd                           ubuntu-16-sshd                                  1                                       [OK]

ossobv/ubuntu                                          Custom ubuntu image from scratch (based on o…   0                                       

smartentry/ubuntu                                      ubuntu with smartentry                          0                                       [OK]

1and1internet/ubuntu-16-healthcheck                    ubuntu-16-healthcheck                           0                                       [OK]

paasmule/bosh-tools-ubuntu                             Ubuntu based bosh-cli                           0                                       [OK]

pivotaldata/ubuntu-gpdb-dev                            Ubuntu images for GPDB development              0                                       

 

docker社が用意したイメージ、STARSが8426のubuntuをダウンロードする。

sudo docker pull ubuntu:16.04

イメージ名とイメージIDを確認。

docker images

$ docker images

REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE

ubuntu-kazumax           latest              77672f0a2762        35 hours ago        2.45GB

ubuntu                   16.04               b9e15a5d1e1a        2 weeks ago         115MB

jeltje/varscan2          latest              6df55adfc7d5        5 weeks ago         725MB

ubuntu                   14.04               971bb384a50a        2 months ago        188MB

centos                   latest              49f7960eb7e4        3 months ago        200MB

lavenderca/muver         latest              fd0c2415cdde        4 months ago        1.24GB

metabat/metabat          latest              d9259b96b365        5 months ago        60.1MB

nileshtawari/chronqc     chronqc_1.0.4       a2bb7bfc794c        9 months ago        890MB

eitanbanks/manta-1.0.3   latest              61cd9a5d5f6f        19 months ago       288MB

molecular/breakdancer    latest              28543e51bb72        23 months ago       658MB

 

ubuntu16.04コンテナイメージを分析する。

Whaler -sV=1.36 b9e15a5d1e1a

$ Whaler -sV=1.36 b9e15a5d1e1a

Analyzing b9e15a5d1e1a

Docker Version: 17.06.2-ce

GraphDriver: overlay2

Environment Variables

|PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

 

Image user

|User is root

 

Potential secrets:

Dockerfile:

RUN set -xe  \

&& echo '#!/bin/sh' > /usr/sbin/policy-rc.d  \

&& echo 'exit 101' >> /usr/sbin/policy-rc.d  \

&& chmod +x /usr/sbin/policy-rc.d  \

&& dpkg-divert --local --rename --add /sbin/initctl  \

&& cp -a /usr/sbin/policy-rc.d /sbin/initctl  \

&& sed -i 's/^exit.*/exit 0/' /sbin/initctl  \

&& echo 'force-unsafe-io' > /etc/dpkg/dpkg.cfg.d/docker-apt-speedup  \

&& echo 'DPkg::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' > /etc/apt/apt.conf.d/docker-clean  \

&& echo 'APT::Update::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' >> /etc/apt/apt.conf.d/docker-clean  \

&& echo 'Dir::Cache::pkgcache ""; Dir::Cache::srcpkgcache "";' >> /etc/apt/apt.conf.d/docker-clean  \

&& echo 'Acquire::Languages "none";' > /etc/apt/apt.conf.d/docker-no-languages  \

&& echo 'Acquire::GzipIndexes "true"; Acquire::CompressionTypes::Order:: "gz";' > /etc/apt/apt.conf.d/docker-gzip-indexes  \

&& echo 'Apt::AutoRemove::SuggestsImportant "false";' > /etc/apt/apt.conf.d/docker-autoremove-suggests

RUN rm -rf /var/lib/apt/lists/*

RUN sed -i 's/^#\s*\(deb.*universe\)$/\1/g' /etc/apt/sources.list

RUN mkdir -p /run/systemd  \

&& echo 'docker' > /run/systemd/container

CMD ["/bin/bash"]

 

 

インフォマティクスのツールには、公共のDocker Hubにイメージは共有されていても、Dockerfile(イメージビルドの時に実行した内容が記載される)が別に公開されてないイメージもたくさんあります。特に、よく使われるツールで、開発者以外の方が登録したイメージに多い印象です。仮想環境といえど、そもそもそのようなイメージは使うべきではないという議論はさておき、例えば妙にファイルサイズが大きなイメージ、ツールがどこに入っているかわからないイメージなどは気になりますね。そういったイメージもビルド手順みれば一目瞭然です。例えば使わないツールが親切心でapt-getされていて、それで容量が肥大しているなら、除いてカスタムビルドするだけでかなりディスクスペースを節約できます(立ち上げて修正し、eixtしてコミットし直してもいいと思いますが)。 活用して下さい。

 

引用

GitHub - P3GLEG/Whaler: Program to reverse Docker images into Dockerfiles