はじめに
セキュリティに携わる人たちにとって、PoC(Proof of Concept)は脆弱性に対する攻撃を再現するにあたって重要であり、GitHubから入手することも多いと思います。
また実務ではセキュリティと離れている人でも、例えば趣味でCTFに取り組んだりしている場合は、攻撃サーバーが持つ脆弱性に関連するPoCを、GitHubで検索して利用したことがあるという人もいると思います。
一見、PoCはセキュリティ技術者に向けて共有されるコードやバイナリであり、提供者もセキュリティ技術者である前提があり、提供者が悪意を持っていることを想定していないかもしれません。 しかし、関連研究によるとGitHubにはPoCを装ってマルウェアを実行させようとする悪意のあるリポジトリが複数存在することが示されています。
今回は実際にGitHubのPoCを調査し、悪意のあるリポジトリを抽出することを試みました。
-
結論……
今回の調査では、明確に悪意があると判断できるPoCリポジトリは確認できませんでした。PoCは脆弱性を突くコードなので、VirusTotalなどでマルウェアと判定されるバイナリを含んでいるリポジトリは複数見つかりましたが、その中で悪意があると判断できるものは見つけられませんでした。また、厳密とは言えない検証となりますので、それでも構わないという方は温かい気持ちで読んでいただけると幸いです。
関連研究
タイトル: Beyond the Surface: Investigating Malicious CVE Proof of Concept Exploits on GitHub
著者: Soufian El Yadmani, Robin The, Olga Gadyatskaya
所属: Leiden Institute of Advanced Computer Science, Leiden University
この研究は、多くのセキュリティベンダーのブログなどにも引用されているので目にしたことがある人もいるかと思います。詳しくはこの論文を参照していただきたいですが、簡単にまとめさせていただきます。
- 2017年~2021年のCVEを対象としたGitHubリポジトリの中のPoCに、どのくらい悪意あるものが潜んでいるかを調査したもので、47,285件のリポジトリを分析した。
- 通常のPoCを装ってマルウェアを配布する悪意あるリポジトリが存在し、その割合はなんと1.9%にも昇った。
- 通常のPoCに見せかけたバイナリを実行すると、攻撃ツールであるCobaltStrikeがインストールされるものなどがあった。
- 他にも通常のPoCを装い、実行した人に対して攻撃を行う様なコードを持つリポジトリが複数存在していた。
この様に、何気なく利用しているGitHubのPoCには思った以上に脅威が潜んでいたことが分かります。
ただ、論文発表時点で既にその当時調査対象であったリポジトリのほとんどは削除されてる事が報告されており、現在においても継続した調査分析が必要なのではないかと考えます。
そこで今回は、2023年から最新までの間にNVDに公開されたスコアが7以上の特に重要度の高いCVEに対してのPoCリポジトリに焦点を絞り、調査をしていきます。
アプローチ
関連研究によると、悪意のあるリポジトリはPythonコードの中にbase64などでエンコードされたスクリプトを含むものよりも、圧倒的にexeファイルの様な実行形式のバイナリで提供されることが多いと示されていた為、今回はexeファイルのみを捜索対象にしています。
実は、悪意あるIPアドレスやドメイン名の抽出や、base64でエンコードがされているスクリプトが含まれているかなどを対象としての調査も行いましたが、誤検知が多く目的を達成することは困難であると判断しました。
今回は最終的に1847件のリポジトリを調査しました。スコアで重大な脆弱性を持つCVEのみを検索対象として絞っている上、対象期間内のすべてのCVEを対象とはできていないので、論文と比較すると調査したリポジトリの数が少ないです。
検証のやり方は以下の通りです。
- NVDに問い合わせて対象期間内のCVEを入手。
- GitHubでCVE名を使って検索。
- 検索にかかったリポジトリをクローンしてexeファイルを探索。
- exeファイルが見つかったらVirusShare APIを使って情報を問い合わせる。
実際に使用したコードはGitHubにあげておきます。
結果
合計1847件のリポジトリの中から、VirusShareでマルウェアと検出された16件のバイナリを含むリポジトリを抽出しました。
この調査で見つかったバイナリについて、VirusTotalで再スキャンを行いました。その結果、いずれのファイルも CVE検証用PoCに付属するツールや検証用バイナリであり、明確なマルウェア配布を目的としたものではないと判断できました。
いくつかの結果を詳しく見てみます。
ケース1: ysoserial.exe
-
SHA-256: 3b62ba4040d0d470521dce089c13cd8491d1463acbcc8391a49923caa02c08e9
-
VirusTotal検出数: 51 / 70 engines
-
代表的な検出名: HackTool/Win.Generic.C5418180
-
VirusTotalレポート: https://www.virustotal.com/gui/file/3b62ba4040d0d470521dce089c13cd8491d1463acbcc8391a49923caa02c08e9
例えば、とあるPoCリポジトリにあったysoserial.exeというファイルなのですが、これはPoCを作成する上で利用されるバイナリでした。
ケース2: nc64.exe
-
SHA-256: 3e59379f585ebf0becb6b4e06d0fbbf806de28a4bb256e837b4555f1b4245571
-
VirusTotal検出数: 38 / 68 engines
-
代表的な検出名: HackTool/Win.Netcat.C5283500
-
VirusTotalレポート: https://www.virustotal.com/gui/file/3e59379f585ebf0becb6b4e06d0fbbf806de28a4bb256e837b4555f1b4245571
そしてこれは、CTFでも使ったことがある人は多いと思いますが、netcatですね。
ケース3: CVE-2024-26229.exe
-
SHA-256: f4414202e5650eef9fe7c036a648b0495ab56231a8cd5fa1d69d0735d393a77f
-
VirusTotal検出数: 46 / 71 engines
-
代表的な検出名: Exploit:Win/CVE-2024-26229.B
-
VirusTotalレポート: https://www.virustotal.com/gui/file/f4414202e5650eef9fe7c036a648b0495ab56231a8cd5fa1d69d0735d393a77f
そしてこれもマルウェアであると判定されていますが、PoCが検証しているCVEに対応したバイナリそのものであり、実行した人に対して何らかの悪意あるコードを実行させようとしている訳ではないと考えられます。
他にもありますが、その全てが検証するCVEに関するバイナリであり、マルウェアであると判断されたとしても、悪意があるものではなかったと判断しました。
おわりに
出来る限り新しいCVEに対してのPoCリポジトリを対象に、悪意のあるバイナリの抽出を目指しましたが、残念ながら?見つけることは出来ませんでした。
今後改善するとしたら
- NVDに公開されていないCVEに関しても調査対象に加える(そもそも0dayなどのPoCの方が盛り上がる傾向にあると思うのでその方がいい)。
- IPやドメイン、そしてbase64などのエンコードされたスクリプトに関しても調査する(実はこれは少しやったが誤検知が多すぎて断念したので機能の改善を目指す)。
- VirusShareではなく、VirusTotalのAPIを使用する(最新の情報はVirusTotalにある)。
辺りが考えられるかなと思いました。
今回は悪意のあるリポジトリの抽出は叶いませんでしたが、PoCが攻撃対象にされていることは確かです。今後も他者が提供するPoCを利用する時は細心の注意を払う必要があると思いました。