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
3.7k
コンテナイメージのマルウェア検出とその実用性について
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
1
210
サイバーセキュリティの最新動向:脅威と対策
kyohmizu
1
250
コンテナセキュリティの基本と脅威への対策
kyohmizu
4
1.6k
安全な Kubernetes 環境を目指して
kyohmizu
4
1.1k
Unlocking Cloud Native Security
kyohmizu
5
1.3k
コンテナ × セキュリティ × AWS
kyohmizu
11
3.9k
コンテナセキュリティ
kyohmizu
10
4.2k
Play with 🐐 in Kubernetes
kyohmizu
1
1.3k
Security Command Center × PagerDuty 自動アラート通知の取り組み
kyohmizu
0
640
Other Decks in Technology
See All in Technology
DjangoCon Europe 2025 Keynote - Django for Data Science
wsvincent
0
240
Azure Maps Visual in PowerBIで分析しよう
nakasho
0
160
2025-04-14 Data & Analytics 井戸端会議 Multi tenant log platform with Iceberg
kamijin_fanta
0
140
意思決定を支える検索体験を目指してやってきたこと
hinatades
PRO
0
350
【Λ(らむだ)】最近のアプデ情報 / RPALT20250422
lambda
0
140
読んで学ぶ Amplify Gen2 / Amplify と CDK の関係を紐解く #jawsug_tokyo
tacck
PRO
1
280
Microsoft Fabric vs Databricks vs (Snowflake) -若手エンジニアがそれぞれの強みと違いを比較してみた- "A Young Engineer's Comparison of Their Strengths and Differences"
reireireijinjin6
1
110
10ヶ月かけてstyled-components v4からv5にアップデートした話
uhyo
5
440
OPENLOGI Company Profile for engineer
hr01
1
25k
企業が押さえるべきMCPの未来
takaakikakei
0
200
コードや知識を組み込む / Incorporating Codes and Knowledge
ks91
PRO
0
150
watsonx.data上のベクトル・データベース Milvusを見てみよう/20250418-milvus-dojo
mayumihirano
0
180
Featured
See All Featured
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
34
2.2k
VelocityConf: Rendering Performance Case Studies
addyosmani
329
24k
The Invisible Side of Design
smashingmag
299
50k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
How GitHub (no longer) Works
holman
314
140k
GraphQLとの向き合い方2022年版
quramy
46
14k
Side Projects
sachag
453
42k
How to train your dragon (web standard)
notwaldorf
91
6k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
23
2.7k
Docker and Python
trallard
44
3.4k
The Pragmatic Product Professional
lauravandoore
33
6.6k
Site-Speed That Sticks
csswizardry
6
520
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!!