Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
コンテナイメージのマルウェア検出とその実用性について
Search
Kyohei Mizumoto
April 12, 2023
Technology
4
4k
コンテナイメージのマルウェア検出とその実用性について
3-shake SRE Tech Talk #5 ~ コンテナセキュリティ最前線 の資料です。
https://3-shake.connpass.com/event/277945/
Kyohei Mizumoto
April 12, 2023
Tweet
Share
More Decks by Kyohei Mizumoto
See All by Kyohei Mizumoto
クラウドネイティブ環境の脅威モデリング
kyohmizu
2
590
コンテナサプライチェーンセキュリティ
kyohmizu
2
300
サイバーセキュリティの最新動向:脅威と対策
kyohmizu
1
320
コンテナセキュリティの基本と脅威への対策
kyohmizu
4
1.8k
安全な Kubernetes 環境を目指して
kyohmizu
4
1.2k
Unlocking Cloud Native Security
kyohmizu
5
1.4k
コンテナ × セキュリティ × AWS
kyohmizu
11
4.1k
コンテナセキュリティ
kyohmizu
10
4.3k
Play with 🐐 in Kubernetes
kyohmizu
1
1.4k
Other Decks in Technology
See All in Technology
[CVPR2025論文読み会] Linguistics-aware Masked Image Modelingfor Self-supervised Scene Text Recognition
s_aiueo32
0
210
ゆるふわエンジニアでもAIフローにチャレンジしたい!!~Zapierのすゝめ~
masakiokuda
2
100
夢の印税生活 / Life on Royalties
tmtms
0
290
RAID6 を楔形文字で組んで現代人を怖がらせましょう(実装編)
mimifuwa
1
320
Understanding Go GC #coefl_go_jp
bengo4com
0
1.1k
ソフトウェア エンジニアとしての 姿勢と心構え
recruitengineers
PRO
10
3.9k
退屈なことはDevinにやらせよう〜〜Devin APIを使ったVisual Regression Testの自動追加〜
kawamataryo
4
810
浸透しなさいRFC 5322&7208
hinono
0
120
アジャイルテストで高品質のスプリントレビューを
takesection
0
120
Webアクセシビリティ入門
recruitengineers
PRO
2
840
モバイルアプリ研修
recruitengineers
PRO
4
850
7月のガバクラ利用料が高かったので調べてみた
techniczna
3
670
Featured
See All Featured
Being A Developer After 40
akosma
90
590k
GitHub's CSS Performance
jonrohan
1031
460k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.6k
Why Our Code Smells
bkeepers
PRO
338
57k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3k
Agile that works and the tools we love
rasmusluckow
329
21k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Thoughts on Productivity
jonyablonski
69
4.8k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
283
13k
Side Projects
sachag
455
43k
Transcript
コンテナイメージのマルウェア検出と その実用性について @kyohmizu
whoami 株式会社スリーシェイク Sreake事業部 (SRE/)CSIRT - AWS, GCP, kubernetes 環境のセキュリティ強化 -
SOC/CSIRT運用と改善 - 脅威情報の収集、サイバー演習 etc… その他 - 3-shake SRE Tech Talk 運営 - 「コンテナセキュリティ」書籍監訳 水元 恭平 @kyohmizu
ざっくり概要 コンテナイメージのマルウェアスキャンはあまり聞かないけど、何か 使い道はないか? というのをOSSベースで考えてみる話です。
目次 ✅ アンチウイルスについて ✅ コンテナ環境のマルウェア ✅ コンテナイメージのマルウェアスキャン ✅ マルウェアスキャン導入の要否
アンチウイルスについて
アンチウイルス(NGAV)の機能 ✅ パターンマッチング ➢ ファイルの静的な情報からマルウェアを検知 ✅ ヒューリスティック検知 ➢ ファイルの特徴的な挙動からマルウェアを検知 ✅
AI・機械学習 ➢ マルウェアの特徴を分析し、検知の精度を高める ✅ サンドボックス ➢ 隔離された環境でマルウェアを分析
アンチウイルス(NGAV)の機能 ✅ パターンマッチング ➢ ファイルの静的な情報からマルウェアを検知 ✅ ヒューリスティック検知 ➢ ファイルの特徴的な挙動からマルウェアを検知 ✅
AI・機械学習 ➢ マルウェアの特徴を分析し、検知の精度を高める ✅ サンドボックス ➢ 隔離された環境でマルウェアを分析 コンテナイメージの マルウェアスキャン
アンチウイルスとEDR ✅ アンチウイルス(EPP)は事前対策、EDRは事後対策 ✅ アンチウイルス < EDR ✅ Enterprise製品には両機能を兼ね備えたものも多い https://www.eset.com/jp/topics-business/next-gen-antivirus/
コンテナ環境のマルウェア
コンテナ環境を狙うマルウェア ✅ Doki ➢ Docker APIをターゲットとするバックドア型トロイの木馬 ✅ Kinsing ➢ Docker
APIをターゲットとするクリプトマイナー ✅ Peirates ➢ Kubernetesのペネトレーションテストツール ➢ https://github.com/inguardians/peirates https://attack.mitre.org/techniques/T1610/
参考:Kinsingマルウェア https://blog.aquasec.com/threat-alert-kinsing-malware-container-vulnerability
マルウェアの侵入経路 ✅ ビルド時の侵入 ➢ 依存関係のあるファイルやライブラリにマルウェアが混入 ✅ デプロイ時の侵入 ➢ OSSやサードパーティのManifestにマルウェアが混入 ➢
攻撃者がマルウェアを含むコンテナを意図的にデプロイ ✅ 実行時の侵入 ➢ 脆弱性の利用により、実行中のコンテナにマルウェアをダウンロード
コンテナイメージのマルウェアスキャン
ClamAV ✅ オープンソースのアンチウイルスエンジン ✅ 複数のシグネチャに対応 ➢ CVD (ClamAV Virus Database)、YARAなど
✅ コンテナイメージを直接スキャンできない ➢ tar形式に保存することでスキャン可能 ➢ ただし、展開しない場合は1ファイルとしてスキャン https://github.com/Cisco-Talos/clamav
サンプルイメージ $ cat Dockerfile FROM alpine RUN echo "Downloading EICAR
file" && \ wget --no-check-certificate https://secure.eicar.org/eicar.com ENTRYPOINT ["/bin/sh", "-c", "sleep 3600"] $ docker image build -t eicar_sample . ✅ EICARテストファイルを利用 ➢ https://www.eicar.org/download-anti-malware-testfile/
ClamAVによるスキャン $ docker image save eicar_sample -o image_eicar_sample.tar $ clamscan
image_eicar_sample.tar Loading: 14s, ETA: 0s [========================>] 8.66M/8.66M sigs Compiling: 4s, ETA: 0s [========================>] 41/41 tasks /Users/kyohmizu/clamav/image_eicar_sample.tar: Win.Test.EICAR_HDB-1 FOUND ----------- SCAN SUMMARY ----------- Known viruses: 8659491 Engine version: 1.0.1 Scanned directories: 0 Scanned files: 1 Infected files: 1 Data scanned: 14.68 MB Data read: 7.01 MB (ratio 2.09:1) Time: 18.916 sec (0 m 18 s) Start Date: 2023:04:10 02:20:51 End Date: 2023:04:10 02:21:10
YARA ✅ マルウェアの識別・分類のためのツール ✅ C言語ライクな構文でルールを記述する ✅ CLIツール、C言語のライブラリが提供されている ✅ ルールセット例 ➢
https://github.com/JPCERTCC/jpcert-yara ➢ https://github.com/Yara-Rules/rules ➢ https://github.com/deepfence/yara-rules https://github.com/VirusTotal/yara
YARAルール rule malware_Emotet { meta: description = "detect Emotet in
memory" author = "JPCERT/CC Incident Response Group" rule_usage = "memory scan" reference = "internal research" strings: $v4a = { BB 00 C3 4C 84 } $v4b = { B8 00 C3 CC 84 } $v5a = { 6D 4E C6 41 33 D2 81 C1 39 30 00 00 } $v6a = { C7 40 20 ?? ?? ?? 00 C7 40 10 ?? ?? ?? 00 C7 40 0C 00 00 00 00 83 3C CD ?? ?? ?? ?? 00 74 0E 41 89 48 ?? 83 3C CD ?? ?? ?? ?? 00 75 F2 } $v7a = { 6A 06 33 D2 ?? F7 ?? 8B DA 43 74 } $v7b = { 83 E6 0F 8B CF 83 C6 04 50 8B D6 E8 ?? ?? ?? ?? 59 6A 2F 8D 3C 77 58 66 89 07 83 C7 02 4B 75 } condition: all of ($v4*) or $v5a or $v6a or all of ($v7*) }
YaraHunter ✅ コンテナに特化したマルウェアスキャンツール ➢ 仕組みはtrivyと同じ ✅ YARAルールによるシグネチャベースのスキャンを行う ➢ https://github.com/deepfence/yara-rules ➢
内部ではyaraのライブラリを使用している ✅ コンテナイメージ、実行中のコンテナへのスキャンが可能 ✅ docker, containerd に対応 ✅ ドキュメントが少ない... https://github.com/deepfence/YaraHunter
YaraHunterによるスキャン $ docker run -it --rm --name=yara-hunter \ -v /var/run/docker.sock:/var/run/docker.sock
\ deepfenceio/yara-hunter:latest \ --image-name eicar_sample:latest ✅ 公式イメージを利用 ➢ https://docs.deepfence.io/docs/yarahunter/using/scan/ ➢ ルールセット、スキャン対象を変更可能
YaraHunterによるスキャン { "Timestamp": "2023-03-28 20:28:37.660643034 +00:00", "Image Name": "eicar_sample:latest", "Image
ID": "172fe8dfa924ea059ab084eede871bfb9bbe31a89089b106008fcf98f08d5700", "Malware match detected are": [ { "Image Layer ID": "b1098b32d2d6b2d3787d72d11e0605a38ceb2b88f6117387eb1c91ee79b0bb92", "Matched Rule Name": "eicar", "Strings to match are": [ "X5O!P%!@(MISSING)AP[4\\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*" ], "Category": [], "File Name": "/tmp/Deepfence/YaRadare/df_eicarsamplelatest/ExtractedFiles/b1098b32d2d6b2d3787d72d11e0605a38ceb2b88f6117387eb1c 91ee79b0bb92/eicar.com", "description":"Rule to detect Eicar pattern ", "author":"Marc Rivero | @seifreed ", "hash1":"275a021bbfb6489e54d471899f7db9d1663fc695ec2fe2a2c4538aabf651fd0f ", "Summary": "The file has a rule match that Rule to detect Eicar pattern .The matched rule file's author is Marc Rivero | @seifreed .The matched rule file's hash1 is 275a021bbfb6489e54d471899f7db9d1663fc695ec2fe2a2c4538aabf651fd0f ." } ] }
ClamAV vs YaraHunter ✅ ClamAVの方がシグネチャが豊富 ➢ CVDは日々アップデートされている ✅ YaraHunterの方がコンテナ環境への導入は容易 ➢
CIのサンプルコードも用意されている ✅ YaraHunterではマルウェアを検知できない場合もある ➢ シグネチャが不十分 ➢ 不具合の可能性も?
参考:Kinsingマルウェアのスキャン 1/5 入手した検体を各ツールでスキャンしてみる
参考:Kinsingマルウェアのスキャン 2/5 $ clamscan kinsing Loading: 13s, ETA: 0s [========================>]
8.66M/8.66M sigs Compiling: 4s, ETA: 0s [========================>] 41/41 tasks /Users/kyohmizu/malware/kinsing/kinsing: Unix.Malware.Kinsing-7812065-1 FOUND ----------- SCAN SUMMARY ----------- Known viruses: 8659491 Engine version: 1.0.1 Scanned directories: 0 Scanned files: 1 Infected files: 1 Data scanned: 0.50 MB Data read: 15.93 MB (ratio 0.03:1) Time: 19.009 sec (0 m 19 s) Start Date: 2023:04:11 23:33:08 End Date: 2023:04:11 23:33:27 ClamAV:〇
参考:Kinsingマルウェアのスキャン 3/5 $ cat rules/kinsing.yar rule elf_kinsing_w0 { meta: description
= "Rule to find Kinsing malware" author = "Tony Lambert, Red Canary" date = "2020-06-09" source = "https://raw.githubusercontent.com/Neo23x0/signature-base/master/yara/crime_h2miner_kinsing.yar" strings: $s1 = "-iL $INPUT --rate $RATE -p$PORT -oL $OUTPUT" $s2 = "libpcap" $s3 = "main.backconnect" $s4 = "main.masscan" $s5 = "main.checkHealth" $s6 = "main.redisBrute" $s7 = "ActiveC2CUrl" $s8 = "main.RC4" $s9 = "main.runTask" condition: (uint32(0) == 0x464C457F) and filesize > 1MB and all of them } $ yara rules/kinsing.yar kinsing elf_kinsing_w0 kinsing YARA:〇
参考:Kinsingマルウェアのスキャン 4/5 $ docker run -it --rm --name=yara-hunter \ -v
/var/run/docker.sock:/var/run/docker.sock -v $(pwd)/rules:/tmp/my-rules \ deepfenceio/yara-hunter:latest --image-name kinsing_sample:latest --rules-path /tmp/my-rules imageScan &{kinsing_sample:latest /tmp/Deepfence/YaRadare/df_kinsingsamplelatest { [] [] []} 0} imageName kinsing_sample:latest INFO[2023-04-11 14:46:30] trying to connect to endpoint 'unix:///var/run/docker.sock' with timeout '10s' INFO[2023-04-11 14:46:30] connected successfully using endpoint: unix:///var/run/docker.sock (中略) INFO[2023-04-11 14:46:50] container runtime detected: docker imageName kinsing_sample:latest { "Timestamp": "2023-04-11 14:46:51.258052700 +00:00", "Image Name": "kinsing_sample:latest", "Image ID": "360b23ecf303fba2520972c64149f1eed6f2be98df4665eeb0ee1f6d621a8123", "Malware match detected are": [ ] } YaraHunter:❌ ????
参考:Kinsingマルウェアのスキャン 5/5 $ docker image save kinsing_sample -o kinsing_sample.tar $
clamscan kinsing_sample.tar Loading: 12s, ETA: 0s [========================>] 8.66M/8.66M sigs Compiling: 4s, ETA: 0s [========================>] 41/41 tasks /Users/kyohmizu/malware/kinsing/kinsing_sample.tar: Unix.Malware.Kinsing-7812065-1 FOUND ----------- SCAN SUMMARY ----------- Known viruses: 8659491 Engine version: 1.0.1 Scanned directories: 0 Scanned files: 1 Infected files: 1 Data scanned: 15.18 MB Data read: 22.94 MB (ratio 0.66:1) Time: 19.211 sec (0 m 19 s) Start Date: 2023:04:12 02:29:51 End Date: 2023:04:12 02:30:10 ClamAV(tar from container image):〇
マルウェアスキャン導入の要否
Do You Need To Install an Antivirus? ✅ LinuxのマルウェアはWindowsに比べると多くない ✅
コンテナ最適化OSの環境ではマルウェアのリスクは低下する ✅ アンチウイルスは時代遅れだと考える人も多い ✅ 他のセキュリティ対策によるクラスタ保護で十分では? ➢ 監査ツールや静的解析ツール ➢ ランタイムセキュリティツール ➢ コンテナセキュリティのベストプラクティスの適用 https://thechief.io/c/editorial/kubernetes-do-you-need-to-install-an-antivirus/ https://repost.aws/questions/QU22HJZItZQRar3wcGcnDtTQ/eks-antivirus-and-best-practices
Do You Need To Install an Antivirus? ✅ Linuxやコンテナ環境のマルウェアが存在しないわけではない ➢
コンテナの普及に伴い、マルウェア作成の動機が高まる ✅ リスクは低いが0ではない ➢ ノードへのマルウェア侵入は防げても、コンテナ内はまた別の話 ✅ 効果は限定的だが、全くないわけではない ✅ アンチウイルスの保護機能を全てカバーできているのか? ➢ 全てをカバーできていなければ導入の余地はある
マルウェアスキャンの効果と課題 ✅ マルウェアを特定できる ➢ 効果の大きさはシグネチャ次第 ➢ 検知だけでなく調査、分析への活用も ✅ 侵入前にマルウェアを検知可能 ✅
実行コストが高い ➢ 全ファイルのスキャンを行うため、リソース消費が多く時間もかかる ➢ ClamAVコンテナの推奨メモリは4GiB ✅ 利用できるOSSやシグネチャが少なく、成熟していない ➢ ツールの新規開発や改修、シグネチャのアップデートが必要
マルウェアスキャンの導入・運用コスト ✅ ビルド時:低 ➢ CIへの組み込みは容易 ✅ デプロイ時:高 ➢ 実行コストが高く、デプロイ時にスキャンを実行するのは現実的でない ✅
実行時:高 ➢ 実行コストが高い(デプロイ時と同様) ➢ 専用のOSSがなく開発が必要 ➢ Enterprise製品の利用で上記コストは軽減可能
Kubernetes Securityによるマルウェア対策 マルウェアス キャン 脆弱性 管理 セキュリティポリ シー イメージ署 名
KSPM ランタイムセキュリ ティ ビルド時の侵入 ◯ ◯ デプロイ時の侵入 ◯ ◯ ◎ ◯ 実行時の侵入 ◯ ◯ ◯ ◯ 事前対策 事後対策 ✅ ビルド時の侵入対策は弱い ✅ デプロイ時の侵入はポリシーやイメージ署名が有効 ✅ クラスタの衛生管理により、実行時の侵入リスクを軽減
ファストフォレンジックへの利用 ✅ 不審なコンテナが発見された場合の調査・分析 ➢ イメージ署名のないコンテナの実行を検知 ➢ コンテナ内での不審な動作を検知 ➢ 身に覚えのないコンテナが実行されていることを発見 ✅
マルウェアが特定されれば影響範囲を推測できる ✅ コストが低く、導入が容易 ✅ スキャンを自動化することでより素早い対応に ➢ CLIツールのため組み込みやすい
余談:ツール導入の優先度について ✅ 導入効果 = 導入前後のリスクの差分 ✅ リスク = 発生可能性 ×
影響度 ➢ 発生可能性、影響度はセキュリティ対策の状況により変動する ➢ 対策が弱い箇所の方がリスクが高くなりやすい ✅ 効果を定量化するのは難しいが、相対評価は比較的容易 ➢ そのツールを導入することで、どのようなリスクを軽減できるのか ➢ 既存のセキュリティ対策でリスクは軽減できているか ➢ 他に優先的に取り組むべき対策はないか ✅ コストを加味し費用対効果で考える
まとめ ✅ コンテナイメージのマルウェアスキャンツールを3つ紹介 ✅ 十分なセキュリティ対策がとられている場合、マルウェアスキャンによ る恩恵は少ない ✅ 追加の防御層として、多層防御に組み込むのはあり ➢ ビルド時のスキャン、ファストフォレンジックへの利用が効果的
➢ 基本的には、他のセキュリティ対策を優先すべき ✅ 費用対効果にもとづいて、導入要否や優先順位を決めましょう
Thanks!!