Sansan 技術本部 情報セキュリティ部 CSIRT グループの川口です。 2023年4月からセキュリティエンジニアで新卒として、Sansan に入社しました。 現在は ログ基盤(SIEM)のログの取り込み部分の機能修正、問い合わせ対応、インシデント対応などの業務に取り組んでいます。 今回は内定者インターンシップで開発した、自宅ルータの脆弱性検知システムについて紹介します。
目次は以下の通りとなります。
開発に至った経緯
新型コロナウイルスの流行に伴い、リモートワークという言葉をよく耳にするようになったと思います。 弊社でも緊急事態宣言下においては、原則リモートワークとなり、現在はオンライン・オフラインを併用した働き方をしています。
ここで問題となってくるのが自宅環境のセキュリティ担保です。 オフィスだと一定の環境を提供することができますが、自宅だと利用しているネットワークやルータの環境がそれぞれ異なります。 さらにセキュリティやネットワークに関する知識も各従業員によって違ってきます。 在宅環境ではこうしたネットワークの機器や知識に関するギャップが存在しますが、オフィスで働く環境と同等のセキュリティを自宅でも確保する必要があります。
実際にリモートワークに伴うインシデントの一つとして、在宅時に業務用端末がインターネット上に公開されてしまうというものがあります。 実際に弊社でも、故意にポート開放を行なっていないにも関わらず、ポートが意図せず公開されてしまう事象が発生しています。 こちらは開発に利用していたコンテナと特定のルータを利用している場合に発生した事象で、Firewall や VPN で制御してても起こり得る可能性があり、早急な対策が必要でした。
作成したシステム
上で挙げたようなインシデントの原因としては、ルータの設定不備や脆弱性などが考えられますが、それらは多種多様な要因があり、特定の対処のみで解決するというのは難しいのが現状です。
このような問題に対してのアプローチとして、従業員が利用しているルータの設定不備や脆弱性をこちら側から特定することで、被害を最小限に抑えることができます。 そこで、インターンシップでは以下のようなシステムを作りました。 システムのおおまかな流れをざっくりと伝えると以下の通りです。
- 従業員が利用している端末のログから、ネットワークの設定に不備がありそうなログを収集する
- 疑いがある端末が利用しているルータに対して、ポートが開放されているか確認する
- ポートが開放されていた場合は CSIRT に連絡する
技術的な話
ここからはシステムの技術的な話をしていきます。 本システムを細かく見ていくと以下の要素で構成されています。
- EDR
- ポートスキャン
- チケットシステムへの起票
- SOAR
EDR
従業員が利用する端末には EDR(Endpoint Detection and Response)が導入されています。 EDR はエンドポイント上でのアクティビティをリアルタイムで監視し、不審な振る舞いの検出とその対応を行います。 作成したシステムでは EDR のログを利用することで、ネットワークの設定不備や意図しない動作によって外部に公開されている疑いのあるネットワークを特定します。 今回は以下の2パターンのケースを考え、外部から通信が行える状態で疑いのある端末を絞り出します。
- 端末にグローバル IP が割り振られている
- 直接外部から通信が行われているログ
1.はルータの設定不備などにより端末に直接グローバルIPアドレスが割り当てられ、無防備にも外部から通信が行われているケースです。
2.はNAT配下にある端末が意図せずポート開放され、外部からアクセスできてしまうケースです。UPnPやマルチキャスト疎通の設定に関係なく起こるケースを確認しています。
これらは端末にインストールされている EDRのログから該当の情報を入手することができます。 24 時間ごとに対象のログを自動で取集し*1、次で説明するポートスキャンでスキャンする対象を特定します。
ポートスキャン
EDR のログから通常の外部から通信が行われている疑いのある端末を特定することができました。 この状態だと、まだ疑いがあるだけですので実際に外部から通信が可能かどうか確認する必要があります。 ここで EDR のログから入手した情報を元にルータに対してポートスキャンを行います。 ポートスキャンとは、ネットワークに接続されているコンピュータやサーバーがどのポート(特定の通信チャネル)でサービスやアプリケーションを提供しているかを調査するために、外部から特定のデータを送信して、それに対してアクセス可能かどうかを調べます。
ポートスキャンツールには Nmap *2を利用し、インフラには AWS Lambda *3を採用しています。 EDR のログから疑いのある端末のグローバル IP を抽出し、スクリプト上で以下のコマンドを実行しポートスキャンを行います。
$ nmap 192.0.2.1 -sV -F
以下ではコマンドの詳細について説明します。 今回のスキャンでは TCP スキャンを採用しています。 TCP スキャンは、SYN フラグをたてた TCP リクエストをポートに送信し、3ウェイハンドシェイクが成立したかどうかでポート開閉を判断するスキャンです。
-sV はサービスバージョンの検出を有効にするオプションです。 つまり、対象ホストの各オープンポートに対して、実際に実行されているサービスとそのバージョン情報を特定しようとします。
また、-F は Fast Scan を有効にするオプションです。 通常 Nmap は、プロトコルごとに一般的な1000ポートをスキャンしますが、このオプションにより100ポートに限定します。 この 100 ポートは一般的に利用されるポート(主要なポート)のみを対象とし、スキャンを迅速に完了させることができます。 スキャン時間の比較として、jp.sansan.com に対して -F オプションなしの場合とありの場合でスキャンを行なってみました(未許可のネットワークやシステムへのスキャンは違法行為と見なされ、法的な問題を引き起こす可能性があります。必ず適切な権限と許可を取得してからポートスキャンを行ってください)。 なしの場合だとスキャン完了に63.42秒かかりましたが、アリの場合だと23.38秒でスキャン完了しています。 スキャン時間に約3倍ほどの違いがあり、Lambda の実行時間は15分という制約もあるので、なるべくスキャン時間を短縮したいかつ、主要なポートを網羅できているのでファストスキャンを採用しました。
上記をまとめると上のコマンドは192.0.2.1という IP アドレスに対して TCP スキャンを実行し、一般的に利用される主要な 100 ポートにたいして、オープンポートのサービスとそのバージョン情報を特定しようとします。
チケットシステムへの起票
ポートスキャンを行うことで外部から通信可能な端末を特定できましたが、これで終わりではありません。 実際にはこの後に、該当者に連絡し、ルータの設定を見直してもらうといった対応が必要となります。 こちらの対応も CSIRT が行なっていますが対応するにあたり、どの従業員がどこでいつわかったのか、また誰が担当するのかと…いった情報が必要となります。 そこで、チケットとして起票することでチーム内で管理しています。 具体的には、以下の情報をチケットとして起票しています。
- グローバル IP
- ローカル IP
- 端末名
- ログの種類
- OS情報
- スキャンした時刻
- 開放されていたポート番号
- ポート番号に対応するサービス
CSIRT ではインシデント管理やアラート対応を支援するために PagerDuty *4というクラウドサービスを利用しており、実際にアラートで上で挙げた情報が記載されていることがわかります。
また、PagerDuty 上から該当 IP に対して Namp アクションを行う機能も実装しており、検知時と現在の差分を確認することもできます。
SOAR
SOAR とは Security Orchestration Automation and Response の略でセキュリティ運用の効率化・自動化を実現化する概念です。 上でも説明した 「EDR でのログ収集」→「ポートスキャン」→「チケットシステムへの起票」これらの一連の処理を自動化してくれています。 また、意図してポートを開放しているケースに対してのフィルタリングの処理も SOAR 上で行っています。
CSIRT では Tines というサービスを用いることで自動化を実現しています。 Tines の詳細については過去の Tech blog で紹介されているので、詳しく知りたい方はそちらをご覧ください。
まとめと今後の課題
この記事では在宅勤務時のインシデント対策のため、ルータの脆弱性検知を行うシステムについて紹介しました。 インターンという中で、実際の業務で利用するシステムを1から開発する貴重な経験を積むことができました。 しかし、システムの課題としてはまだまだたくさんあります。
- IPv6への未対応
- スキャン候補が多い場合、AWS Lambdaがタイムアウトする
- ファストスキャンの対象ポート以外を検知できない
- UDPに対応していない
まだまだ課題は山積みですが、今後も課題に取り組みながら、より信頼性の高いシステムを構築し、組織のセキュリティを向上させることを目指しています。