人を震えさせるツール｢Dockle｣の仕組みを解説〜Dockerセキュリティの基礎知識も一緒に

# はじめに
｢[3分でできる！最高のDockerfileを書いたあとにやるべき1つのこと](https://qiita.com/tomoyamachi/items/2397457f5d516a1fbc85)｣で告知した[Vuls祭り #5](https://vuls-jp.connpass.com/event/131960/)で、コンテナのセキュリティについてお話ししました。

しかし15分程度の時間だと、説明不足な点もあったので、資料を修正しつつ、補足コメントを入れました。 

パートごとにタイトルを付けたので、Qiitaの目次を参考にするとわかりやすいと思います。[Dockerイメージの簡単な説明 & Dockle内部でやっていることの解説](#dockerイメージの簡単な説明--dockle内部でやっていることの解説) が本記事のメインパートです。
[<img width="400" alt="toc.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14275/1edbf502-8388-493b-785c-d3721ad88c91.png">](https://qiita.com/tomoyamachi/items/2397457f5d516a1fbc85)


参考になったら、Vuls/Dockle/Trivyのスターお願いします! 特にDockleは後発でスター数が少なく、まずはスター1Kを目指してます。
Vuls [![stars](https://img.shields.io/github/stars/future-architect/vuls.svg)](https://github.com/future-architect/vuls) Dockle [![stars](https://img.shields.io/github/stars/goodwithtech/dockle.svg)](https://github.com/goodwithtech/dockle) Trivy [![stars](https://img.shields.io/github/stars/knqyf263/trivy.svg)](https://github.com/knqyf263/trivy)


なお、タイトルの元ネタはこちらです。震えてくださってありがとうございます。 @nagashi_ma_w 
<img width="400" alt="twitter.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14275/5e65bcd9-7388-d791-0d58-f75589dbdd63.png">

- 2019.6.20: いくつかスライドを削除し、順番を入れ替えました。オリジナル版は[SpeakerDeckの資料](https://speakerdeck.com/tomoyamachi/dockersekiyuriteidui-ce-falsexian-zhuang-todui-ce-turufalseshi-zu-mi-and-shi-ifang)で確認できます
- 2019.7.10 実際にPublicなコンテナイメージに対しての実行結果をサイトにまとめました。 [DockerHubで公開されているコンテナが安全か確かめてみた結果](https://qiita.com/tomoyamachi/items/e0e69da521505e73237b) に操作方法をふくめ、まとめてあります。

# スライド

## コンテナ導入実態と、セキュリティの現状

![slide4](https://speakerd.s3.amazonaws.com/presentations/5dd14e96b7214a3aa099794a2899fe23/preview_slide_4.jpg?523478)
![slide6](https://speakerd.s3.amazonaws.com/presentations/5dd14e96b7214a3aa099794a2899fe23/preview_slide_6.jpg?523478)


- このパートでコンテナの導入状況を聞いたら9割以上の人が手を上げました。Vulsを利用するところはかなり堅い(既存の資産が強い)企業が多いので意外なのとともに、コンテナの普及率を物語っていました
- IDC Japanの資料は2018年版の資料です。2019年版は高額で手が出せなかった
- セキュリティインシデント情報は2018年の情報を元にした資料。詳細は[こちら](https://www.tripwire.com/state-of-security/devops/organizations-container-security-incident/)。


## 利用できるセキュリティの指標と、対策ツールたち

![slide7](https://speakerd.s3.amazonaws.com/presentations/5dd14e96b7214a3aa099794a2899fe23/preview_slide_7.jpg?523478)
![slide8](https://speakerd.s3.amazonaws.com/presentations/5dd14e96b7214a3aa099794a2899fe23/preview_slide_8.jpg?523478)
![slide9](https://speakerd.s3.amazonaws.com/presentations/5dd14e96b7214a3aa099794a2899fe23/preview_slide_9.jpg?523478)
![slide10](https://speakerd.s3.amazonaws.com/presentations/5dd14e96b7214a3aa099794a2899fe23/preview_slide_10.jpg?523478)
![slide11](https://speakerd.s3.amazonaws.com/presentations/5dd14e96b7214a3aa099794a2899fe23/preview_slide_11.jpg?523478)
![slide12](https://speakerd.s3.amazonaws.com/presentations/5dd14e96b7214a3aa099794a2899fe23/preview_slide_12.jpg?523478)

- [CISベンチマーク](https://www.cisecurity.org/cis-benchmarks/)はこちら。CIS(The Center for Internet Security)が専門家の意見を元に発行している資料です
- まわりの企業を見ても、イメージはプライベートレジストリにおいて、クラウドのマネージドサービスで運用というパターンが多いと思うのですがデータはありません

## Dockle/Trivyでチェックできること
![slide15](https://speakerd.s3.amazonaws.com/presentations/5dd14e96b7214a3aa099794a2899fe23/preview_slide_15.jpg?523478)
![slide13](https://speakerd.s3.amazonaws.com/presentations/5dd14e96b7214a3aa099794a2899fe23/preview_slide_13.jpg?523478)
![slide14](https://speakerd.s3.amazonaws.com/presentations/5dd14e96b7214a3aa099794a2899fe23/preview_slide_14.jpg?523478)
![slide16](https://speakerd.s3.amazonaws.com/presentations/5dd14e96b7214a3aa099794a2899fe23/preview_slide_16.jpg?523478)
![slide17](https://speakerd.s3.amazonaws.com/presentations/5dd14e96b7214a3aa099794a2899fe23/preview_slide_17.jpg?523478)

- 🔺は独断です。｢安全なソースから〜｣の項目は厳密には❌なのですが、直接インストールしても脆弱性チェックはできる、という意味で甘めに🔺にしてます。

## Dockerイメージの簡単な説明 & Dockle内部でやっていることの解説

![slide19](https://speakerd.s3.amazonaws.com/presentations/5dd14e96b7214a3aa099794a2899fe23/preview_slide_19.jpg?523478)
![slide20](https://speakerd.s3.amazonaws.com/presentations/5dd14e96b7214a3aa099794a2899fe23/preview_slide_20.jpg?523478)
![slide21](https://speakerd.s3.amazonaws.com/presentations/5dd14e96b7214a3aa099794a2899fe23/preview_slide_21.jpg?523478)
![slide22](https://speakerd.s3.amazonaws.com/presentations/5dd14e96b7214a3aa099794a2899fe23/preview_slide_22.jpg?523478)
![slide23](https://speakerd.s3.amazonaws.com/presentations/5dd14e96b7214a3aa099794a2899fe23/preview_slide_23.jpg?523478)
![slide24](https://speakerd.s3.amazonaws.com/presentations/5dd14e96b7214a3aa099794a2899fe23/preview_slide_24.jpg?523478)

- 詳細はこちらの資料。イメージの説明は66ページからはじまります。
今回は概要だけお伝えしましたが、イメージに保存される各ファイルの形式や情報などもまとまっています。
[Docker might not be your friend. Trojanizing Docker images](https://www.slideshare.net/cr0hn/rootedcon-2017-docker-might-not-be-your-friend-trojanizing-docker-images)
- OS情報のパース, パッケージ情報のパースの部分を僕が担当してます。TrivyでもVulsでも利用されています。

## Vulsでも一部の機能を実装したよ

![slide28](https://speakerd.s3.amazonaws.com/presentations/5dd14e96b7214a3aa099794a2899fe23/preview_slide_28.jpg?523478)
![slide29](https://speakerd.s3.amazonaws.com/presentations/5dd14e96b7214a3aa099794a2899fe23/preview_slide_29.jpg?523478)

![slide30]
(https://speakerd.s3.amazonaws.com/presentations/5dd14e96b7214a3aa099794a2899fe23/preview_slide_30.jpg?523478)

- OS/パッケージの脆弱性の検知はVulsの機能を使っていて、Trivyを利用してません。ライブラリの検知部分ではTrivyを利用しています。
- ライブラリの検知は割とアツイ機能!! だが、時間なくてほぼスキップした内容。
あの現場でVulsのデモが正常に動くのは、 @kotakanbe@github と僕だけだったと思うので、デモすればよかったと思いました。

## 未発表資料

![slide33](https://speakerd.s3.amazonaws.com/presentations/5dd14e96b7214a3aa099794a2899fe23/preview_slide_33.jpg?523478)
全然話す余裕なかった。どこかでお話ししたい

# 最後に

スライド中でも触れてますが、ここで扱っているのはイメージに関することだけです。
Host設定/DockerDaemon設定/Runtimeの設定のいずれもやらなければならないことなので、このあたりの知見もふくめて情報をまとめたいです。