こんにちは!セキュリティの世界へようこそ。
今日は、皆さんが作ったWebサイトやWebアプリが、インターネット上の「泥棒」からどうやって狙われているのか、そしてどう守ればいいのかを、身近な例えを交えて一緒に学んでいきましょう。
「セキュリティ」と聞くと難しく感じるかもしれませんが、要は「自分の家に誰かが勝手に入ってこないように鍵をかける」ことと同じなんですよ。
—
1. Webサイトの「裏口」ってどこにあるの?
皆さんが公開しているWebサイトには、表玄関(トップページやログイン画面)の他に、「自分たちしか知らないはずの場所」が存在していることが多いんです。
例えば、こんなファイルやパスに心当たりはありませんか?
/admin/(管理者用画面)/backup.zip(バックアップファイル)/.env(設定ファイル:ここにはパスワードが書かれていることも!)
これらは、開発者がテストのために置いたままにしていたり、サーバーの設定ミスで「誰でも見える状態」になっていたりすることがあります。攻撃者は、この「鍵をかけ忘れた裏口」を血眼になって探しているのです。
2. 泥棒の手口:ディレクトリ・ファイル列挙(ディレクトリ・トラバーサル)
泥棒(攻撃者)は、どうやってその裏口を見つけるのでしょうか。彼らは「総当たり」という手法を使います。
家で例えるなら、「家中のすべてのドアノブを片っ端からガチャガチャと回して、開く場所がないか確認する」という行為です。これを専門用語で「ディレクトリ・ファイル列挙(ブルートフォース)」と呼びます。
攻撃者は、よく使われるファイル名のリスト(辞書)を持っていて、自動化ツールを使って数秒間に何千回ものアクセスを試みます。皆さんのサーバーがもし何の対策もしていなければ、攻撃者のツールには「お、このサイトは /config.php が開けるぞ!」と、宝の地図が完成するように表示されてしまうのです。
3. どうやって防げばいいの?:防御のキホン
では、どうやってこの「ガチャガチャ」を防げばいいのでしょうか。いくつか、今日からできる対策をご紹介します。
① 隠すだけでは不十分!「アクセス制限」が鉄則
「/admin/ というパス名を知られなければ大丈夫」と考えるのは危険です。必ず、「誰がそのページにアクセスできるか」をサーバー側で厳格に管理しましょう。
例えば、Apacheというサーバーソフトを使っているなら、特定のIPアドレスからしかアクセスできないように設定できます。
# .htaccess ファイルの設定例
<Directory "/var/www/html/admin">
# 全てのアクセスを拒否する
Order Deny,Allow
Deny from all
# 特定の会社や自宅のIPアドレスからのみ許可する
Allow from 192.168.1.100
</Directory>
② 404エラーをうまく使う
攻撃者に「このファイルはあるのか?ないのか?」を悟らせないことも大事です。もし、存在しないパスにアクセスされた場合、わざと「404 Not Found(見つかりませんでした)」を返すようにします。
また、最近のセキュリティツールは、「異常な回数のアクセスを検知したら、そのIPアドレスを自動的にブロックする」という機能を持っています。これを入れておくだけで、泥棒は「この家はセキュリティが厳しそうだ、次に行こう」と諦めてくれるわけです。
③ 不要なファイルは公開ディレクトリに置かない
一番大切なのは、「公開しなくていいファイルは、Webからアクセスできない場所に置く」ことです。
Webサイトのプログラム本体を /var/www/html/ に置いているなら、設定ファイル(.env や秘密鍵など)は、その一段上の階層に置くようにしてください。そうすれば、どんなに一生懸命ガチャガチャしても、外からは物理的にアクセスできないので安心ですよね!
4. 防御ヘッダーを知っておこう
最後に、ブラウザに「このサイトは安全だよ」と伝えるための魔法の言葉を紹介します。これらをHTTPレスポンスヘッダーに含めることで、攻撃の手助けをしないようにできます。
X-Content-Type-Options: nosniff- ブラウザが勝手にファイルの種類を推測して実行するのを防ぎます。「これは画像ファイルだ」と言われたら、そのまま画像として扱うように指示する設定です。
Robots.txtの活用- 検索エンジンに対して「ここは見ちゃダメだよ」と伝えるファイルですが、これも「ここに隠しパスがあるよ」と教えてしまうリスクと表裏一体です。重要な場所は、ファイルで隠すのではなく、サーバーの設定で物理的に遮断しましょう。
—
一歩ずつ対策を学んでいきましょう!
いかがでしたか?「ディレクトリ列挙」と聞くと難しそうですが、要は「見えてはいけないものを、外から見えないように鍵をかける」という、とてもシンプルな防犯活動なんです。
皆さんが書いたコードや設定が、誰かに悪用されないように。まずは、「公開ディレクトリにバックアップファイルや設定ファイルが残っていないか」、今のうちにチェックしてみてくださいね!
もし何か不安なことがあれば、いつでもまた聞きに来てください。一緒に、より強固な要塞のようなWebサイトを作っていきましょう!
コメント