導入
何かわからないことがあると、とりあえず検索窓に単語を打ち込む。これは誰でもやることだと思います。私も長らく、調べ物といえば「検索エンジンに聞く」の一択でした。
ところが、セキュリティの分野に足を踏み入れてみると、この感覚が少し崩れました。同じ「調べる」でも、対象によって最初に開くべき場所がまったく違うのです。ソフトウェアの脆弱性を知りたいなら検索エンジンよりCVEデータベース、ネットに公開されている機器を知りたいならShodan、といった具合です。TryHackMeの「Search Skills」というコンテンツは、まさにこの「どこを見るか」を一通り紹介してくれる内容でした。今回はその内容を、自分の言葉で整理してみます。
目的
このコンテンツのテーマは一貫していて、「何を検索するかと同じくらい、どこを検索するかが大事」という考え方です。攻撃側であれ防御側であれ、調査の質は使う情報源で決まります。逆に言うと、情報源さえ知っていれば、あとは目的に応じて選ぶだけです。
紹介されていたのは次の5つでした。
- Shodan(ネットに繋がっている機器そのものを検索するサービス)
- VirusTotal(ファイルやURLを複数のアンチウイルスエンジンでまとめてチェックするサービス)
- CVEデータベース(脆弱性の共通識別子とその詳細情報)
- manページ(Linuxコマンドの公式マニュアル)
- GitHub(研究者が検証コードや解析レポートを公開する場)
それぞれ役割がはっきり分かれているので、一つずつ振り返ります。
実践
Shodan: 「機器そのもの」を検索する
普段使っている検索エンジンは、Webページの中身を検索対象にしています。一方Shodanは、インターネットに公開されているサーバーやネットワーク機器、監視カメラ、産業用の制御システムまで、ネットに繋がっているもの自体を検索対象にしています。
面白いのは、ソフトウェアのバージョン情報まで拾えることです。あるバージョンに有名な脆弱性が見つかっていれば、そのバージョンを使っている機器を世界中から一覧できてしまいます。攻撃者にとっても脅威ですが、防御側からすれば「自社の機器が無防備な状態でネットに晒されていないか」を点検する手段にもなります。同じ道具が両方の立場から使われる、というのがこの分野らしいところだと思いました。
VirusTotal: 1つのツールを信じすぎない
VirusTotalは、70以上のアンチウイルスエンジンの判定結果を一度に見られるサービスです。ファイルだけでなく、URLやドメイン、ファイルのハッシュ値(内容から計算される固有の値)でも調べられます。
ここで印象に残ったのは「not foolproof(完璧ではない)」という一言でした。複数のエンジンが同じものを危険と判定していれば信頼度は上がりますが、逆に何もヒットしないからといって安全とは限りません。新しい脅威は、アンチウイルス側の検知がまだ追いついていないこともあるからです。1つのツールの答えを鵜呑みにしない、という姿勢はこの分野の基本なんだと感じました。
CVEとCVSS: 脆弱性の「共通言語」と「優先順位」
CVE(Common Vulnerabilities and Exposures)は、確認された脆弱性に振られる世界共通の識別子です。CVE-年-番号という形式で、研究者やベンダーがバラバラの呼び方をしないための共通言語になっています。
そして各CVEには、CVSS(Common Vulnerability Scoring System)というスコアが付きます。影響度・悪用のしやすさ・攻撃条件といった要素を数値化したもので、組織はこのスコアをもとに「どの脆弱性から対応すべきか」を判断します。数ある問題の中から優先順位を決める、いわゆるトリアージの考え方です。名前だけでなく点数まで共通化されているのは、規模の大きい組織ほど効いてきそうな仕組みだと思いました。
manページ: 公式ドキュメントを最初に見る
Linuxにはman <コマンド名>でターミナル上にマニュアルを表示できる仕組みがあります。ブログやAIの回答は便利ですが、情報が古かったり誤っていたりすることもあります。それに対してmanページはツールの作者・メンテナが直接書いているものなので、最も正確で最新の情報源です。「困ったら公式ドキュメントを最後の手段ではなく最初の手段にする」という言い回しが、地味ですがしっくりきました。
GitHub: 速報性はあるが、鵜呑みは禁物
最後はGitHubです。CVE番号でそのままGitHubを検索すると、研究者が公開した検証コードや解析レポートが見つかることがあります。公式のセキュリティ勧告より早く情報が出回ることも珍しくないそうです。
ただし当然ながら、公開されているコードがすべて安全とは限りません。中には不完全なものや、わざと動かないように細工されたもの、最悪の場合はコード自体が悪意あるものだったりします。「実行する前に必ず中身を検証する」という注意書きが添えられていて、便利さと危うさが表裏一体であることを実感しました。
反省・教訓
一通り触ってみて、どのツールも単体で完結するものではなく、組み合わせて使うことを前提に作られているのだと感じました。Shodanで見つけたバージョン情報をCVEで調べ、関連するコードをGitHubで探す、といった具合に、情報源同士がゆるく繋がっています。
正直に言うと、こういう情報源の存在自体は名前だけ聞いたことがあるものが多かったです。ただ「何のために」「どういう順番で」使うのかを意識したことはなかったので、そこが整理できたのは収穫でした。次に知らない脆弱性の話を目にしたときは、CVE番号を調べて、CVSSで深刻度を確認して、必要ならGitHubで補足情報を探す、という一連の流れがすぐ頭に浮かぶようになった気がします。