1 - 1.OSINT基礎
9.1. OSINTの基礎知識
9.1.1. OSINTとは
OSINT(Open Source Inteligence)はインテリジェンス手法の1つであり、オープンになっている情報(インターネットを含む広範な情報源を)利用してデータ/情報を収集する活動のこと。
情報源は以下のようなものがある。
- 新聞などのメディアに載せられている公開情報
- 政府広告媒体の官報や財務資料など
- Web上で公開されている情報
- GitHubなどのソースコード
- SNS
9.1.2. その他のインテリジェンス手法
HUMINT
HUMINT(Human Inteligence)はもっとも古いインテリジェンス手法で、個人的な付き合いを利用して情報を収集する活動のこと。 政治的/軍事的/経済的な身分、ビジネスマンや観光客などの立場を利用して情報を収集する。
ある意味スパイ活動とも言える。
SIGINT
SIGINT(Signal Intelegence)は電話/無線/GPS/WI-FIなどから情報を収集する活動のこと。 以下のようなものがそれにあたる
- 電話の盗聴
- 無線LANの解読と通信傍受
- 無線傍受による相手の動向分析
DARKINT
DARKINT(Dark Web Inteligence)はダークウェブから情報を収集する活動のこと。
9.1.3. 脅威インテリジェンス
脅威インテリジェンスとは
脅威インテリジェンスは情報セキュリティの脅威に関する情報を収集・分析し、その根拠に基づいて考慮される情報・データのこと。
脅威インテリジェンスを行う主な目的は、既存の防御戦略を強化するための情報を提供し、あらゆるサイバー攻撃から企業の情報財産を保護することにある。 これを行うことで組織が脅威の兆候を早期に識別し、効果的なセキュリティ対策を講じることが可能となる。
脅威インテリジェンスの種類
種類 | 説明 |
---|---|
戦略的脅威インテリジェンス | 脅威を状況の中で捉えた概要レベルの情報 |
戦術的脅威インテリジェンス | 脅威の攻撃手順と防衛手順に関する詳細情報 |
運用的脅威インテリジェンス | 特定の攻撃に対する対策実施に利用できる情報 |
技術的脅威インテリジェンス | 攻撃が行われている具体的な痕跡情報 |
9.2. OSINTサービス
Web上で利用できるOSINT関連のサービスの紹介。
OSINT Framework
OSINTツールの紹介ページ。
9.2.1. 資産の外部公開状況の調査
Shodan
インターネットに公開されたデバイスの中からポートが開放されている機器を調べることのできるサイト。
Censys
グローバルIPアドレスから該当サーバーで利用できるプロトコルを調査したり、サーバー証明書を検索することができるサイト。 公開されているデバイスを検出、監視、分析するのに役立つ。
9.2.2. パスワード漏洩の調査
Have I Been Pwned
自分の電子メールアドレスやユーザー名/パスワードがデータ漏洩に巻き込まれたかどうかを確認するためのウェブサイト。
BugMeNot
9.2.3. ファイル/マルウェアの調査
VirusTotal
ファイルやウェブサイトのマルウェア検査を行うウェブサイト。そのファイルやウェブサイトが「マルウェアを含むかどうか」検査できる。
ANY.RUN
アップロードした検体を操作してファイルの挙動を見ることができるオンライン型のサンドボックスサービス。
Hybrid Analysis
アップロードしたファイルの挙動情報などの詳細な解析結果が得られるサービス。
Metadefender
複数のセキュリティエンジンを使用してファイルスキャンを行いマルウェアやその他の脅威を検出できるサービス。
9.2.4. WEBサイトの評価/調査
Aguse
調査したいサイトのURLや受信したメールのメールヘッダーを入力することにより、関連する情報を表示するサービス。
Aguse Gateway
ユーザの代わりにサイトアクセスを行いサイトの表示情報を画像で表示してくれるサービス。
Urlscan.io
ユーザが入力したURLに対して、代理でアクセスを行い、そのスキャン結果を公開しているサービス。
Sucuri SiteCheck
Webサイトがウイルス感染していないかのチェックができるWebサービス。
Abuse IPDB
IPを検索することで、そのIPに関する他者からの報告を確認できる。グローバルIPアドレスを調査したい場合に使用できる。
Netcraft Site Report
Webサイトがどこのサーバーで管理されてるか調査・確認できるサービス。
9.2.5. ゼロディ/エクスプロイトの有無の調査
Rapid 7
脆弱性検索エンジン。
Zero0 DAY Exploit Database
Exploit DataBase
脆弱性エクスプロイト・アーカイブ。
CX Security
最新のエクスプロイトに直接アクセスでき検索できるデータベース。
Vulnerability Lab
エクスプロイトや PoC を備えた大規模な脆弱性データベース。
ExploitAlert
インターネット上で発見されたエクスプロイトのDB。
JVN/CVE
名称 | URL | 説明 |
---|---|---|
JVN | https://jvn.jp/ | 日本の全国的な脆弱性データベース |
CVE | https://cve.mitre.org/ | CVE(共通脆弱性識別子)に基づいた脆弱性のデータベース化したもの |
CVE List | https://www.cve.org/ | CVE List |
9.2.6. SSL/TLSのセキュリティ強度の調査
SSL Server Test
Test TLS
Certificate Checker
9.2.7. 失効済みサーバ証明書の有無の調査
9.2.8. 自己署名証明書(オレオレ認証)の調査
9.2.9. 画像の出典/特定情報有無の調査
TinEye
ウェブ上で似た画像を特定しその情報や出典を調査できるサイト。
9.2.10. メールアドレスの漏洩調査
Hunter
Anymail Finder
9.2.11. IPアドレスの使用場所の調査
MaxMind
9.2.12. WIFIのESSID漏洩調査
WiGLE.NET
9.2.13. 画像情報(Exifデータ)の調査
Exif Data Viewer Online
exifdata
9.2.14. WEBサイトのアーカイブ/キャッシュの調査
Internet Archive
Googleキャッシュ
archive today
9.2.15. IPアドレス/ドメインの利用履歴の調査
SecurityTrails
DNS History
9.2.16. その他の情報に関する調査
9.3. OSINTツール
9.3.1. 資産の外部公開状況の調査
9.3.2. パスワード漏洩の調査
9.3.3. ファイル/マルウェアの調査
pdfInfo
9.3.4. WEBサイトの評価/調査
9.3.5. ゼロディ/エクスプロイトの有無の調査
Recon-ng
ウェブ上から情報を収集し分析するためのツール。脆弱性評価や攻撃可能性の調査、組織や個人のプロファイリングなどで使用される。 metasploitのようなツールなのでCUIでいろいろコマンドを打って操作を行う。
# ===============================
# 基本コマンド
# ===============================
# recon-ngの起動
# exit, backなどで終了などをする
recon-ng
# 全てのモジュールをrecon-ngにインストール
marketplace install all
# モジュールの検索を行う
module search
# ワークスペースを作成するとプロジェクト/データを効率的に分離できる
# ワークスペースの作成
workspace create <ワークスペース名>
# ワークスペースの確認
workspace list
# ワークスペースのロード
workspace load <ワークスペース名>
SpiderFoot
インターネット上の情報を収集するツール。これで集めた情報はネットワークの脆弱性やリスクを評価するために使用される。
9.3.6. SSL/TLSのセキュリティ強度の調査
9.3.7. 失効済みサーバ証明書の調査
9.3.8. 自己署名証明書(オレオレ認証)の調査
9.3.9. 画像の出典/特定情報有無の調査
exiftool
9.3.10. メールアドレスの調査
theHarvester
主に電子メールアドレスやドメインに関連する情報を収集し組織や個人のデータを見つけることのできるツール。 Netcraftと合わせて利用することでサーバに直接照会せずに情報収集できる。
# ドメインから電子メールアドレス、サブドメイン、IPアドレスなどの情報を、指定された情報源から最大200件収集
theHarvester -d [ドメイン名] -l 200 -b all
9.3.11. IPアドレスの調査
9.3.12. WIFIの調査
9.3.13. 画像情報(Exifデータ)の調査
9.3.14. WEBサイトの調査
9.3.15. IPアドレス/ドメインの調査
CloakQuest3r
CloakQuest3rはCloudflareを使用してサーバーのIPアドレスを秘匿している場合にDNSの履歴やサブドメインからIPアドレスの漏えいが起きていないかを一発でチェックしてくれるツール。
使用方法は以下の通り。
python3 cloakquest3r.py [ドメイン名]
9.3.16. 個人情報の調査
Metagoofil
ウェブ上からメタデータを収集するために使用されるツール。情報のリークや組織のデジタルフットプリントを評価するのに使用される。
FOCA
ウェブサイトからメタデータを取得し組織や個人のプロファイリングするツール。
SKIPTRACER
人物情報を収集して関連性を分析するツール。
CREEPY
ソーシャルメディアを中心にインターネット上から個人の情報を収集するツール。
9.3.17. その他の情報に関する調査
Maltego
調査対象のドメインやDNS名などからインターネット上の情報を収集し、その関係性を可視化できるOSINTtツール。 利用にはアカウントが必要となる。
2 - 2.ログ解析基礎
ログの基本知識
ログはシステム、デバイス、またはアプリケーション内で記録されたイベントまたはトランザクションのこと。
具体的には、これらのイベントは、アプリケーション エラー、システム障害、監査されたユーザーのアクション、リソースの使用、ネットワーク接続などに関連する可能性がある。
各ログエントリには、タイムスタンプ (発生日時)、ソース (ログを生成したシステム)、特定のログ イベントに関する追加情報など、イベントの状況を説明するための関連詳細が含まれている。
ログの種類
ログ分析には、さまざまなログの種類、形式、標準を理解することが重要となる。 またログには以下のような種類がある。
- アプリケーションログ * ステータス、エラー、警告など、特定のアプリケーションに関するメッセージを含む
- 監査ログ * 規制遵守にとって重要な運用手順に関連するアクティビティ
- セキュリティログ * 権限の変更、ファイアウォール アクティビティなどのセキュリティイベントを含む
- サーバーログ * システムログ、イベントログ、エラーログ、アクセスログなど、サーバーが生成するさまざまなログを含む
- システムログ * カーネルアクティビティ、システムエラー、ブートシーケンス、およびハードウェアステータス
- ネットワークログ * ネットワークトラフィック、接続、その他のネットワーク関連イベント
- データベースログ * クエリや更新など、データベース システム内のアクティビティ
- Webサーバログ * Webサーバーによって処理されたリクエスト (URL、応答コードなどを含む)
ログの形式
ログの形式はログファイル内のデータの構造と編成を定義するもの。 データのエンコード方法、各エントリの区切り方、および各行にどのフィールドが含まれるかを指定する。 これらの形式は大きく異なり、半構造化、構造化、非構造化の3つの主要なカテゴリに分類される。
半構造化ログ
半構造化ログは構造化データと非構造化データが含まれる場合があり、自由形式のテキストに対応する予測可能なコンポーネントが含まれる。 このタイプのログには以下のようなものがある。
- Syslogメッセージ形式 … システムログとネットワークログ用に広く採用されているログプロトコル
- Windowsイベントログ( EVTX ) 形式 … Windows システム用の独自の Microsoft ログ
構造化されたログ
構造化されたログは厳密で標準化された形式に従っているため解析と分析に役立つ。 このタイプのログには以下のようなものがある。
- フィールド区切り形式(csv, tsv)
- JSON
- W3C Extended Log Format(ELF)
- XML
非構造化ログ
非構造化ログは自由/任意形式のテキストで構成されている。 コンテキストが豊富ですが、体系的な解析がしずらい可能性がある。 このタイプのログには以下のようなものがある。
- NCSA Common Log Format (CLF) … クライアント要求用の標準化されたWebサーバログ形式(Apacheのログ形式)
- NCSA Combined Log Format (Combined) … CLF の拡張であり、リファラーやユーザーエージェントなどのフィールドが追加されている(Nginxのログ形式)
ログの収集/管理/一元化
ログの収集
ログの取集はログ分析を行う際に需要となる要素で、サーバやネットワーク、ソフトウェア、データベースなど様々な要素からのログ集約が含まれる。
ログの保存と整合性時のためにはシステムの時間精度を維持することが重要で、NTPを利用することはこのタイムラインの整合性を確保するための重要な手段となる。
ログ収集を行う際のデータ入手する際のプロセス例は以下の通り。
- ソースの特定 … 収集するログソースのリストアップを行う
- ログ収集ソフトウェアの選択 … ログの収集ツールやソフトウェアの選定
- 収集するパラメータの決定 … どのイベントを記録するか決定を行い、NTP時刻同期の有効も確認する
- テストによるログ収集 … テストを実行して適切に周遊されている確認する
ログの管理
ログの保存管理に関するソリューションの決定も行う。
- ストレージの選定 … ログを保持するストレージの選定を行う
- 編成 … ログをソース、タイプなどで分類しアクセスしやすいようにする
- バックアップ … ログを定期的にバックアップしデータの損失を防ぐ
- 確認 … 定期的にログが保存されているか確認を行う
ログの一元化
ログの一元化を統合ツールなどで行うと、リアルタイム検出、自動通知、インシデント管理等が行える。 ログの一元化を行うとアクセス分析が大幅に効率化される。
- 一元化システムの選択 … Elastic StackやSplunkなどログを統合するツールを決定する
- ソースの統合 … ログソースを選択したシステムに接続する
- モニタリングのセットアップ … 統合ツールのセットアップを行う
- インシデント管理の統合 … 統合ツールがインシデント管理などと統合できるようにする
ログの保存/削除
ログはローカルシステムやクラウドストレージなどいろいろな場所に保存できる。
ログの保存期間
ログの保存は以下のポリシーに従って保存されることが多い
- ホットストレージ … 過去3か月~過去6か月のログを保存するもの。アクセスしやすいようにするべき。
- ウォームストレージ … 過去6か月~2年のログを保存するもの。ホットストレージよりすぐにアクセスできる必要はない
- コールドストレージ … 過去2年~5年のログを保存するもの。アーカイブや圧縮化されたログとなり容易にアクセスできなくてもよい。
ログの削除
ログの削除は価値のある可能性のあるログが削除されないように慎重に行う必要があり、重要なものは削除前にバックアップする必要がある。
ログ収集/管理の設定
Rsyslogによるログ収集
Linuxのログ収集システムであるrsyslogを使用してログ収集を行う際の設定例を記載する。
なお、例では/var/log/websrv-02/rsysog_sshd.log
に保存するように構成する。
- Terminalを開く
sudo systemctl status rsyslog
によりrsyslogのインストールと動作確認をする- viエディタで
vi /etc/rsyslog.d/98-websrv-02-sshd.conf
を開きファイルに以下構成を追加する$FileCreateMode 0644
:programname, isequal, "sshd" /var/log/websrv-02/rsyslog_sshd.log
- 設定ファイルを保存して閉じる
sudo systemctl restart rsyslog
によりrsyslogを再起動するssh localhost
を行い設定が機能することを確認する
Logrotateを使用したログ管理
Linuxのログ管理システムであるlogrotateの設定を行う際の設定例を記載する。
なお例では/var/log/websrv-02/rsysog_sshd.log
のログファイルのローテーションの設定を行うように構成する。
sudo vi /etc/logrotate.d/98-websrv-02_sshd.conf
などで構成ファイルを作成する- 以下のようにログ設定を行う
/var/log/websrv-02/rsyslog_sshd.log {
daily
rotate 30
compress
lastaction
DATE=$(date +"%Y-%m-%d")
echo "$(date)" >> "/var/log/websrv-02/hashes_"$DATE"_rsyslog_sshd.txt"
for i in $(seq 1 30); do
FILE="/var/log/websrv-02/rsyslog_sshd.log.$i.gz"
if [ -f "$FILE" ]; then
HASH=$(/usr/bin/sha256sum "$FILE" | awk '{ print $1 }')
echo "rsyslog_sshd.log.$i.gz "$HASH"" >> "/var/log/websrv-02/hashes_"$DATE"_rsyslog_sshd.txt"
fi
done
systemctl restart rsyslog
endscript
}
- ファイルを保存する
sudo logrotate -f /etc/logrotate.d/98-websrv-02_sshd.conf
でログローテーションを開始する
ログ分析のテクニック
ログ分析はSIEMツール(SplunkやElastic Search)などを使用すると複雑なログ分析タスクなどを行うことができる。
なお即時ログ分析が必要な場合はLinuxの場合、cat
、grep
、sed
、sort
、uniq
などのツールで分析する場合もある。
またWindowsの場合はEZ-Tools
と呼ばれるコマンドレットで分析できる。
また、awk
やsha256um
、GET-FileHash
などのコマンドでも分析が行える。
ログの分析手法
ログ分析を行い、パターンや異常性などを特定するためのテクニック手法には以下のようなものがある。
- パターン認識
- 異常検出
- 相関関係の分析
- タイムライン分析
- 機械学習/AIを用いた分析
- 視覚化による分析
- 統計解析
ログ解析の基本
一般的なログファイルの場所
Linuxの場合ログファイルは以下のような場所に通常は配置される。
- Webサーバー:
* Nginx:
* アクセスログ:
/var/log/nginx/access.log
* エラーログ:/var/log/nginx/error.log
* Apache: * アクセスログ:/var/log/apache2/access.log
* エラーログ:/var/log/apache2/error.log
- データベース:
* MySQL:
* エラーログ:
/var/log/mysql/error.log
* PostgreSQL: * エラーとアクティビティのログ:/var/log/postgresql/postgresql-{version}-main.log
- Webアプリケーション:
* PHP :
* エラーログ:
/var/log/php/error.log
- OS:
* Linux:
* 一般的なシステム ログ:
/var/log/syslog
* 認証ログ:/var/log/auth.log
- ファイアウォールとIDS/IPS:
* iptables:
* ファイアウォールのログ:
/var/log/iptables.log
* Snort: * Snort ログ:/var/log/snort/
上記は一般的なログファイルのパスだが、実際のパスはシステム構成、ソフトウェア バージョン、カスタム設定によって異なる場合がある。
ログの兆候パターン
セキュリティのコンテキストでは、潜在的なセキュリティの脅威を特定するには、ログデータの一般的なパターンと傾向を認識することが重要となる。
これらの「パターン」とは、脅威アクターまたはサイバーセキュリティインシデントによってログに残された識別可能なアーティファクトを指す。 幸いなことに、学習すれば検出能力が向上し、インシデントに効率的に対応できる一般的なパターンがいくつか存在する。
ユーザの行動異常
システムを使うユーザが行う行動から逸脱したアクションやアクティビティを異常行動として扱う。 以下のような内容が異常行動として扱える。
- ログイン試行に複数回失敗 * 短期間に異常に多くのログイン失敗が発生した場合は、ブルートフォース攻撃を示している可能性がある
- 異常なログイン時間 * ユーザーの通常のアクセス時間またはパターン以外のログインイベントは、不正アクセスまたはアカウントの侵害を示す可能性がある
- アクセス元の異常 * ユーザーが通常アクセスしない国の IP アドレスからのログインイベントは、潜在的なアカウント侵害または不審なアクティビティを示している可能性がある
- パスワードの頻繁な変更 * ユーザーのパスワードが短期間に頻繁に変更されたことを示すログイベントは、不正アクセスを隠蔽したり、アカウントを乗っ取ったりする試みを示唆している可能性がある
- 異常なユーザエージェント文字列 * HTTPトラフィックのログのコンテキストでは、一般的なブラウザとは異なる一般的なユーザーエージェント文字列を持つユーザーからのリクエストは、自動化された攻撃または悪意のあるアクティビティを示している可能性がある
一般的な攻撃サイン
ログデータ内の一般的な攻撃シグネチャを特定することは、脅威を検出して迅速に対応するための効果的な方法といえる。 これは攻撃シグネチャには、脅威アクターが残した特定のパターンや特徴が含まれているためである。 検知しやすいシグネチャーの例には以下のようなものがある。
- SQLインジェクション
- 例:
10.10.61.21 - - [2023-08-02 15:27:42] "GET /products.php?q=books' UNION SELECT null, null, username, password, null FROM users-- HTTP/1.1" 200 3122
- 例:
- XSS
- 例:
10.10.19.31 - - [2023-08-04 16:12:11] "GET /products.php?search=<script>alert(1);</script> HTTP/1.1" 200 5153
- 例:
- パストラバーサル
- 例:
10.10.113.45 - - [2023-08-05 18:17:25] "GET /../../../../../etc/passwd HTTP/1.1" 200 505
- 例:
ログの分析手法
ログの分析手法には自動分析と手動分析がある。
自動分析
自動分析はツールを使って行う。具体的にはXPLG や SolarWinds Logglyなどの商用ツールなども含まれる。
- 長所
- 分析の手間が削減できる
- 人工知能による分析はパターン分析に効果的となる
- 短所
- 自動分析ツールは多くの場合は商用である
- コストがかかる
手動分析
手動分析は自動化ツールを使用せずにデータと成果物を手動で検査するプロセスといえる。
- 長所
- 単純なコマンドで解析ができる
- 徹底的に調査できる
- 短所
- ログの再フォーマットなどは手動で行う必要がある
- イベントやアラートを見逃す可能性がある
コマンドラインによるログ分析
catコマンド
ファイルの内容を表示するコマンド。
cat apache.log
lessコマンド
ファイルの内容を一気に表示せず少しずつ表示するコマンド。
↑
や```↓``キーでスクロールできる。
less apache.log
tailコマンド
ファイルの内容を後ろから表示するコマンド。 デフォルトでは最後の10行が表示される。
-f
オプションでリアルタイムの更新も反映、-n 数字
で表示行数の変更ができる。
tail -f -n 10 apache.log
wcコマンド
ファイル内の行数、単語数、文字数に関する情報を見ることのできるコマンド。
wc apache.log
cutコマンド
指定された区切り文字に基づいてファイルから特定の列 (フィールド) を抽出できるコマンド。 構造化データまたはタブ区切りデータを含むログ ファイルを操作する場合に便利なコマンドといえる。
# IPアドレスをApache.logから抽出する例
# -f 7:URL, -f 9でステータスコード確認できる
cut -d ' ' -f 1 apache.log
sortコマンド
特定の基準に基づいてファイル内のデータを昇順または降順にするコマンド。 ログデータのパターン、傾向、外れ値を特定するために重要な操作となる。
# IPアドレスを並び替える例
cut -d ' ' -f 1 apache.log | sort -n [-r]
uniqコマンド
並べ替えられた入力から隣接する重複行を識別して削除するコマンド。 特にログエントリに繰り返しまたは冗長な情報が含まれる可能性がある場合に、データリスト (収集されたIPアドレスなど) を簡素化するのに便利なツールといえる。
# 重複したIPアドレスを削除して表示する例
cut -d ' ' -f 1 apache.log | sort -n -r | uniq
# -cオプションで出現回数も追加して表示できる
cut -d ' ' -f 1 apache.log | sort -n -r | uniq -c
sedコマンド
ログ分析によく使用されるコマンドで、データを効率的に操作、抽出、変換できる。 なお表示形式を変えて表現できるだけでファイル内容の変更は直接行わない。
# 日付形式を31/Aug/2024からAug 31, 2024に置き換え表示する例
sed 's/31\/Aug\/2024/Augs 31, 2024/g' apache.log
awkコマンド
awkコマンドは特定のフィールド値に基づく条件付きアクションして表示できるコマンド。
なお$N
は空白で区切られたフィールド項目を示す。
# HTTPレスポンスコードが400以上の行を表示
awk '$9 >= 400' apache.log
grepコマンド
ファイルまたはテキストストリーム内の特定のパターンまたは正規表現を検索できるコマンド。
# 通常の検索
grep "検索文字" apache.log
# 含む行のカウント
grep -c "検索文字" apache.log
# どの行が一致したか表示したい場合(N:で表示)
grep -n "検索文字" apache.log
# 検索文字を含まない行を表示
grep -v "検索文字" apache.log
正規表現によるログ分析
grepコマンドと正規表現
grepコマンドの場合-E
オプションを付けることで正規表現を利用できる。
grep -E "正規表現" [ファイル]
ログ解析用の正規表現
Apacheログの場合の各項目を抽出するための正規表現を以下に記載する。
- IPアドレス
\b([0-9]{1,3}\.){3}[0-9]{1,3}\b
- タイムスタンプ
\[(\d\d)\/(...)\/(\d{4}):(\d\d):(\d\d):(\d\d) ([+-]\d{4})\]
- HTTPメソッド
(POST|GET|PUT|DELETE|PATCH)
- URL
"([^"]+)[0,1]"
- ユーザエージェント
- ``"([^"]+)"
[間違い]
- ``"([^"]+)"
また正規表現の作成はRegExrで容易に確認できる。
LogstashとGrok
GrokはLogstashのプラグインで非構造化ログ データを構造化された検索可能なデータに解析できるようにできる。 人間が読み取るために作成されたログ形式によく使用される。