はじめに
攻撃者1は攻撃前の事前準備として、公開されている情報を基に偵察行為を行います。
本記事は攻撃者がどのようにして情報収集を行なっているかなど、Webアプリケーションに対する偵察を行う目的及び実行するための手段について記載しています。
攻撃者の偵察行為を知ることは、理にかなったセキュリティ対策の考え方を身につけることができます。
目的と手段
攻撃者が偵察行為として情報収集を行う目的は、収集した情報を基にシステムの脆弱性を特定し、攻撃方法を確立するためです。
偵察行為はサイバーセキュリティフレームワークでも定義されています。
キルチェーンや、MITRE ATT&CKフレームワークの場合、PRE Matrix(Enterprise)に含まれます。MITRE ATT&CKフレームワークについては以前書いた攻撃を基に防御を最大化する考え方 MITRE ATT&CKについて理解するをご参照ください。
従って攻撃者はターゲットとするシステムに対して、入念な情報収集を行います。
また偵察行為はパッシブな偵察と、アクティブな偵察が存在します。
パッシブな偵察はターゲットに接触することなく、ニュース記事、求人情報、ドメイン等から情報収集する行為です。また、Twitter、Facebook、LinkedInなどSNSからも収集します。
逆にアクティブな偵察は公開されている企業のホームページ及び、サービスのコンテンツに対して、様々なツールなどを駆使して情報収集を行います。そのため、システムのアクセスログなどに証跡が残ります。
OSINT
OSINTはインターネット上で公開されている情報に対する調査になるため、再現性の高い調査方法です。
なお、公開情報の性質として意図的に公開されている情報もあれば、まとめサイトやWikipediaなど意図せず第三者的に公開されている情報もあります。そのため、削除されずに残っている情報も存在し続けるという性質を持ちます。
DNS
jpドメインの場合、WHOISからドメインを所有している組織の担当者やメールアドレスなど、攻撃の種となる多くの情報を入手することができます。また、whois以外でもドメインからIPアドレスをはじめ、色々な情報を検出するサービスがインターネット上に存在しています。
DNSDumpsterは公開されていないサブドメインを検出し、収集したDNS情報を表とグラフでグラフィカルに可視化します。
例えば、管理画面のURLなど意図的に公開していないドメイン情報は攻撃者にヒントを与えます。
GitHub
言わずもがなですがGitHubにSSH秘密鍵やAWSのアクセスキーなどクレデンシャル情報はアップロードしてはいけません。ヒューマンエラーが起こる前提で、クレデンシャル情報の取扱いに対するルールや、ガードレール的な仕組みがあることが望ましいです。
git log -p
を実行し、各コミットで反映された変更点を表示することができます。そのため、クレデンシャル情報を削除しても、攻撃者は複製したリポジトリのログから情報を取得することができます。
S3
AWSのS3を使用している環境にて、S3のバケットポリシーの設定がパブリックアクセスできる設定の場合、バケット名とファイル名を知ることができれば誰でもアクセスできます。
そのため、意図的にパブリックアクセスを許可してない場合、システム管理者はセキュリティ事故に繋がるリスクが生じやすいことを認識しておくことが重要です。
S3に対するアクセス方式は以下の2種類があります。
-
Path-Style Requests
https://s3.amazonaws.com/<バケット名>/<ファイル名>
https://s3-ap-northeast-1.amazonaws.com/<バケット名>/<ファイル名>
-
Virtual Hosted-Style Requests
https://<バケット名>.s3.amazonaws.com/<ファイル名>
https://<バケット名>.s3-ap-northeast-1.amazonaws.com/<ファイル名>
S3のバケット及び、オブジェクトにアクセスできるということは、S3に対するリクエストのAPIが実行されているということです。従ってS3の料金の仕組みについて認識しておくことは重要です。例えば、AWS CloudTrailを使用し、データイベントを取得している環境に対して、異常なS3に対するアクセスが行われた場合、CloudTrailのコストが増加する要因になります。
企業の対策として大規模な組織でマルチアカウントを運用しているケースの場合、管理が煩雑になりやすくなります。
そのような状況ではAWS Control Towerや、Amazon GuardDutyを使用して、S3のパブリックアクセスなどの驚異を検出することがきるため、重宝するでしょう。
ただ、上記のようなマネージドサービスはコストがかかるため、スタートアップなどでコストを抑えたい場合は、例としてAWS CloudTrailのイベントログや、Amazon EventBridgeを組み合わせることでイベントを検知して通知するなど、工夫次第で安上がりにコストを抑えることもできます。
偵察行為の勘所
Webアプリケーションを偵察する際の勘所について以下に記載しています。
Google Chrome デベロッパー ツール
Webサイトから情報収集するためにブラウザは誰でも利用可能なインターフェースです。
Google Chromeの場合、デベロッパー ツールを起動して調査を行います。
ターゲットに関する基本的な情報はNetworkタブのResponse headerから、ミドルウェアなど多くの情報が得られます。また、Sourcesタブではブレークポイントを設定してJavaScriptのコードをデバッグすることができます。
多くの場合、JavaScriptファイルを表示すると、1行に表示されます。これは、最小化されているためです。つまり、ファイルを小さくするためにすべての書式設定(タブ、スペース、改行)が削除されています。よって、難読化されているため、簡単に閲覧することはできません。
難読化を解除するためには、2つの中括弧{}であるPrettyPrintオプションを使用して、スクリプトを整形して表示することができます。
Googleを例に上記、赤枠の{}
をクリックすると、難読化されたスクリプトを整形して表示することができます。
robots.txt
robots.txtファイルは、検索エンジンのクローラに対して、どのURLにアクセスしてよいかを伝えるものです。また、Webサイトの特定のコンテンツに対するクロール禁止などを検索エンジンのクローラーに通知するドキュメントです。一般的には検索エンジンの結果に表示されないように、特定の領域を制限するために使用されます。
robots.txtファイルに記載しているページが、管理画面やWebサイトの顧客向けのファイルなどの領域であることを示す場合、robots.txtファイルは、攻撃者に有益な情報を提供します。
sitemap.xml
sitemap.xmlはrobots.txtとは対照的に、Webサイトの内容を検索エンジンのクローラーに提供するために使用されます。
SEO対策目的でサイトマップを作成することが多いですが、セキュリティの観点ではコンテンツからの情報から、まだ公開されていない情報について攻撃者にヒントを与える可能性があります。
Favicon
フレームワークを使用してWebサイトを構築し、Faviconをデフォルトから変更しない場合、攻撃者に使用しているフレームワークのヒントを与える可能性があります。
フレームワークで使用しているFaviconのハッシュ値と、OWASP favicon databaseに公開されているハッシュ値を突合することで、フレームワークやミドルウェアのバージョンを特定することができます。
User-Agentの偽装
スクレイピングなどのツールからHTTPリクエストを実行する場合、システムによっては403のステータスコードを返し、アクセスできない場合があります。
その場合、攻撃者はUser-Agent
を偽装してアクセスを試みます。User-Agent
の偽装方法はツールなどによって異なりますが、多くは簡単にできます。
IPアドレスの秘匿
User-Agent
同様、IPアドレスの偽装も簡単に行うことができます。
攻撃者はIPアドレスを偽装することで、調査を撹乱します。
例えば、Tor Browseの本来の目的は、プライバシー保護を目的としていますが、攻撃者の思考は違います。
ツール
攻撃者がアクティブな偵察行為を行う場合、コンテンツスキャナーを使用してコンテンツを検出します。
コンテンツスキャナーはブルートフォースアタックのように、ワードリストを使用します。ワードリストは一般的に使用される単語の長いリストを含む単なるテキストファイルです。
例えば、パスワードワードリストには最も頻繁に使用されるパスワードが含まれますが、コンテンツを検索する場合は、最も一般的に使用されるディレクトリ名とファイル名を含むリストが必要になります。コンテンツスキャナーでよく使用される単語リストは2009年に発生したRockYouのデータ侵害による発覚したパスワードのリストです。Kali Linuxではデフォルトで/usr/share/wordlists/
に用意されています。
その他、GitHubのSecListsというリポジトリから、特定のアプリケーションおよびプラットフォーム用のワードリストを入手することができます。
※本記事で記載していツールを個人の環境や自システム以外で実施する場合、不正アクセス行為の禁止等に関する法律に触れる可能性があるため、不正の目的での使用はしないでください。
dirb
dirbはWebコンテンツスキャナーです。 コマンドの引数にURLを指定して実行します。
辞書を基にHTTPリクエストを作成し、各リクエストのHTTPレスポンスコードを確認してコンテンツチェックを行います。デフォルトは/usr/share/wordlists/dirb/common.txt
を使用しますが、任意のwordlist_file
ファイルを指定することができます。
- 実行例
$ dirb http://<IPアドレス>
kali@kali:~$ dirb http://<IPアドレス>
-----------------
DIRB v2.22
By The Dark Raver
-----------------
START_TIME: Sat Apr 9 09:10:09 2022
URL_BASE: http://<IPアドレス>/
WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt
-----------------
GENERATED WORDS: 4612
---- Scanning URL: http://<IPアドレス>/ ----
+ http://<IPアドレス>/index.php (CODE:200|SIZE:6163)
==> DIRECTORY: http://<IPアドレス>/javascript/
+ http://<IPアドレス>/server-status (CODE:403|SIZE:277)
---- Entering directory: http://<IPアドレス>/javascript/ ----
-----------------
END_TIME: Sat Apr 9 09:25:08 2022
DOWNLOADED: 9224 - FOUND: 2
- 参考:Dirb
gobuster
gobusterもDirb同様、ワードリストを使用してWebサイトに対してコンテンツスキャンを行います。
Go言語で書かれていて、gobusterから取得できます。
実戦的な使い方として、gobuster
を実行してディレクトリを検出後、検出したディレクトリを指定して更に掘り下げた探索をしたり、ファイル名が特定できている場合は-x
のオプションを付与することで効率的に探索ができます。
- 実行例
$ gobuster dir --url http://<IPアドレス> --wordlist <wordlist_file>
kali@kali:~$ gobuster dir --url http://<IPアドレス> --wordlist /usr/share/wordlists/dirb/common.txt
===============================================================
Gobuster v3.0.1
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@_FireFart_)
===============================================================
[+] Url: http://<IPアドレス>
[+] Threads: 10
[+] Wordlist: /usr/share/wordlists/dirb/common.txt
[+] Status codes: 200,204,301,302,307,401,403
[+] User Agent: gobuster/3.0.1
[+] Timeout: 10s
===============================================================
2022/04/09 10:23:04 Starting gobuster
===============================================================
/.hta (Status: 403)
/.htpasswd (Status: 403)
/.htaccess (Status: 403)
/index.php (Status: 200)
/javascript (Status: 301)
/server-status (Status: 403)
===============================================================
2022/04/09 10:23:50 Finished
===============================================================
- 参考:Gobuster
ffuf
ffufはWebアプリケーションなどにリクエストするデータの入力を自動化することで、レスポンスの振る舞いからコンテンツを発見するなど、ファジングを行う目的で利用されます。
- 実行例
$ ffuf -w /usr/share/wordlists/dirb/common.txt -u http://<IPアドレス>/FUZZ
kali@kali:~$ ffuf -w /usr/share/wordlists/dirb/common.txt -u http://<IPアドレス>/FUZZ
/'___\ /'___\ /'___\
/\ \__/ /\ \__/ __ __ /\ \__/
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
\ \_\ \ \_\ \ \____/ \ \_\
\/_/ \/_/ \/___/ \/_/
v1.2.0-git
________________________________________________
:: Method : GET
:: URL : http://<IPアドレス>/FUZZ
:: Wordlist : FUZZ: /usr/share/wordlists/dirb/common.txt
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 40
:: Matcher : Response status: 200,204,301,302,307,401,403
________________________________________________
.htaccess [Status: 403, Size: 277, Words: 20, Lines: 10]
.htpasswd [Status: 403, Size: 277, Words: 20, Lines: 10]
.hta [Status: 403, Size: 277, Words: 20, Lines: 10]
[Status: 200, Size: 6163, Words: 855, Lines: 375]
index.php [Status: 200, Size: 6163, Words: 855, Lines: 375]
javascript [Status: 301, Size: 317, Words: 20, Lines: 10]
server-status [Status: 403, Size: 277, Words: 20, Lines: 10]
:: Progress: [4614/4614] :: Job [1/1] :: 415 req/sec :: Duration: [0:00:14] :: Errors: 0 ::
参考:Ffuf
OWASP
上記のようなツールを踏まえて、セキュリティ対策を行うために有益となる脆弱性診断ツールのOWASP Zapを最後に紹介します。
Open Web Application Security Project(OWASP)は、ソフトウェアのセキュリティを向上させるために活動する非営利団体です。
Webアプリケーションのセキュリティ分野を専門とし、ガイドラインや、脆弱性診断ツール等を作成しているオンラインコミュニティです。
OWASP Top TenはWebアプリケーションのセキュリティに関する10の最も重要なセキュリティ上の懸念事項を概説したドキュメントです。
- Top 10 Web Application Security Risks(2021)
OWASP Zapは、BurpSuiteによく似たセキュリティテストフレームワークです。これは、非常に堅牢な列挙ツールとして機能します。Webアプリケーションのテストに使用されます。また、無料で利用できます。
公式ウェブサイトのDownload ZAPからインストーラーをダウンロードできます。Kali Linuxでは最初からインストールされています。
また、色々な拡張機能が公開されています。
その他、OWASP Juice Shopではセキュリティトレーニングを行うことができます。
おわりに
昨今の情勢や、IOT機器等インターネットに接続するデバイスの増加を背景に、サイバー攻撃はこれからも増加していきます。
サイバー攻撃を防ぐことは完全にできないため、攻撃者がどの様な手段を講じてくるかその思考を理解し、攻撃を基に防御を最大化する考え方が重要だと考えています。
また、クラウドを安全に利用するためには原理原則を踏まえた、クラウドの仕様に対する理解が重要です。
-
アタッカー、クラッカー ↩