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.1k
コンテナイメージのマルウェア検出とその実用性について
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
0
170
コンテナセキュリティの基本と脅威への対策
kyohmizu
4
1.4k
安全な Kubernetes 環境を目指して
kyohmizu
4
1k
Unlocking Cloud Native Security
kyohmizu
5
1.2k
コンテナ × セキュリティ × AWS
kyohmizu
10
3.7k
コンテナセキュリティ
kyohmizu
10
4.1k
Play with 🐐 in Kubernetes
kyohmizu
1
1.2k
Security Command Center × PagerDuty 自動アラート通知の取り組み
kyohmizu
0
600
サイバー攻撃から Kubernetes クラスタを守るための効果的なセキュリティ対策
kyohmizu
14
3.4k
Other Decks in Technology
See All in Technology
障害対応指揮の意思決定と情報共有における価値観 / Waroom Meetup #2
arthur1
5
470
初心者向けAWS Securityの勉強会mini Security-JAWSを9ヶ月ぐらい実施してきての近況
cmusudakeisuke
0
120
透過型SMTPプロキシによる送信メールの可観測性向上: Update Edition / Improved observability of outgoing emails with transparent smtp proxy: Update edition
linyows
2
210
AWS Lambda のトラブルシュートをしていて思うこと
kazzpapa3
2
170
Amplify Gen2 Deep Dive / バックエンドの型をいかにしてフロントエンドへ伝えるか #TSKaigi #TSKaigiKansai #AWSAmplifyJP
tacck
PRO
0
370
エンジニア人生の拡張性を高める 「探索型キャリア設計」の提案
tenshoku_draft
1
120
【Startup CTO of the Year 2024 / Audience Award】アセンド取締役CTO 丹羽健
niwatakeru
0
960
Terraform未経験の御様に対してどの ように導⼊を進めていったか
tkikuchi
2
430
TanStack Routerに移行するのかい しないのかい、どっちなんだい! / Are you going to migrate to TanStack Router or not? Which one is it?
kaminashi
0
580
ノーコードデータ分析ツールで体験する時系列データ分析超入門
negi111111
0
410
VideoMamba: State Space Model for Efficient Video Understanding
chou500
0
190
Why does continuous profiling matter to developers? #appdevelopercon
salaboy
0
180
Featured
See All Featured
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
The World Runs on Bad Software
bkeepers
PRO
65
11k
Designing the Hi-DPI Web
ddemaree
280
34k
RailsConf 2023
tenderlove
29
900
YesSQL, Process and Tooling at Scale
rocio
169
14k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.8k
Faster Mobile Websites
deanohume
305
30k
Designing for Performance
lara
604
68k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
A Tale of Four Properties
chriscoyier
156
23k
Music & Morning Musume
bryan
46
6.2k
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!!