こんにちは!インフラやセキュリティの世界へようこそ。
初めてサーバーやクラウドサービスに触れるとき、「セキュリティ対策って、何から手をつければいいんだろう?」と不安になりますよね。
今回は、AWS WAFやAzure WAFといったクラウドの防壁を使って、Webサイトを守る「マネージドルールセットの最適化」について、一緒に優しく学んでいきましょう!
難しい言葉がたくさん出てきて身構えてしまうかもしれませんが、大丈夫です。身近な「お家の防犯」に例えながら、一歩ずつ紐解いていきますね。
—
1. WAF(ワフ)ってなに?お家の防犯に例えてみよう
皆さんが大切に育てたWebサイトやアプリは、いわば「ネットの世界にある大切なお家」です。
インターネットに繋がっているということは、世界中の誰もがそのお家の玄関(Webサーバー)にたどり着ける状態になっています。
ここで、「うちは鍵をしっかり閉めているから大丈夫!」と思うかもしれませんが、それだけでは少し不安なんです。
例えば、泥棒がピッキングの技術を使ったり、勝手口の鍵をこじ開けようとしたりするとき、普通の鍵だけでは防ぎきれないことがありますよね。
そこで登場するのが WAF(Web Application Firewall) です。
WAFは、いわば「お家の玄関に立って、やってくるお客さんの動きを一人ひとり厳しくチェックしてくれる、超優秀な警備員さん」だと思ってください。
「怪しい動きをする人」「変な合言葉を言おうとする人」を、お家の中に入る手前でピタッと止めてくれる頼もしい存在なんですよ。
—
2. マネージドルールセットってなに?プロが作った「防犯マニュアル」
WAFを導入するときに、一番最初に出会うのが 「マネージドルールセット」 という言葉です。
なんだか呪文みたいで難しそうですよね。
これは、AWSやAzureといったクラウドのプロフェッショナルたち(セキュリティの専門家集団)が作ってくれた、「最新の泥棒の手口が書かれた、最強の防犯マニュアル」のことです。
世界中では毎日、新しいサイバー攻撃の手口が生まれています。それを私たち素人がすべて把握して、一つひとつ対策するのは到底無理ですよね。
だからこそ、プロが作ってくれた「マネージドルールセット」というマニュアルをWAFに読ませておくことで、代表的な攻撃を自動的に見つけてブロックしてもらえるんです。
中でも有名なのが OWASP Top 10(オワスプ トップテン) と呼ばれる、「Webサイトが狙われやすい危険な弱点ランキング」です。ここを狙う代表的な攻撃として、次の2つがあります。
① SQLインジェクション(SQLi)
お家のデータベース(金庫)の鍵穴に、特殊な呪文のような文字(' OR '1'='1 など)を突っ込んで、中身を無理やりこじ開けようとする手口です。WAFはこの変な合言葉を検知して、「入っちゃダメ!」と追い返してくれます。
② クロスサイトスクリプティング(XSS)
掲示板やお問い合わせフォームなどの入力欄に、こっそり悪さをするプログラム(JavaScriptのコードなど)を書き込んで、サイトを見た別の人を罠にはめる手口です。例えば、画面に <script>alert('ハッキング!')</script> のような危険なタグを仕込もうとします。WAFはこうした怪しいタグの侵入を見逃さず、水際で防いでくれます。
—
3. なぜ「最適化」が必要なの?(誤検知という落とし穴)
「じゃあ、プロの防犯マニュアルを全部ONにしておけば完璧だね!」と思いますよね。
実は、ここに現場のエンジニアが頭を悩ませるポイントがあります。
警備員さんが優秀すぎて、「普通のお客さん(善意のユーザー)の荷物まで、怪しいと勘違いして没収してしまう事件」が起きることがあるんです。これをセキュリティ用語で 誤検知(False Positive) と呼びます。
例えば、お客様がアンケートの備考欄に「私はSQLの勉強をしています」と親切に書いてくれたとします。
真面目なメッセージなのに、マネージドルールセットが「おっ、SQLという言葉が入っているぞ!危険な攻撃に違いない!」と勘違いして、そのお客様のアクセスをガチャンと遮断してしまうんです。
これでは、本当にお買い物をしてくれるはずの大切なお客様を追い返してしまいますよね。
だからこそ、「お家のルールに合わせて、警備員さんのチェック基準をちょうどよく調整してあげる(=最適化する)」作業が必要になるのです。
—
4. 実践!AWS WAF / Azure WAFでの設定と最適化の流れ
それでは、実際にクラウド上でどのように設定と最適化を行うのか、イメージを見ていきましょう。
ステップ1:マネージドルールセットの有効化
まずは、AWS WAFやAzure WAFの管理画面から、基本的なルールセット(AWSなら AWSManagedRulesCommonRuleSet など)をポチッと有効にします。
以下は、AWS WAF(JSON形式の設定イメージ)の簡単な抜粋です。
{
"Name": "Default_Web_ACL",
"Rules": [
{
"Name": "AWS-AWSManagedRulesCommonRuleSet",
"Priority": 10,
"Statement": {
"ManagedRuleGroupStatement": {
"VendorName": "AWS",
"Name": "AWSManagedRulesCommonRuleSet",
"ExcludedRules": [
// ここに誤検知が起きて除外したいルールIDを記載します
]
}
},
"OverrideAction": {
"None": {}
},
"VisibilityConfig": {
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "CommonRuleSetMetric"
}
}
]
}
ステップ2:まずは「検知(Count)モード」で様子を見る
いきなり「ブロック(Block)」モードにしてしまうと、もし誤検知があったときに、一般のユーザーがサイトを使えなくなって大慌てしてしまいます。
そのため、最初は 「カウント(Count)モード」 という、「怪しい動きを見つけても、通しはするけどログにメモを残すだけ」の状態にしておきます。
数日間様子を見て、「あ、このルールは普通のお客様のアクセスを誤検知しちゃってるな」と確認できてから、本格的なブロックに切り替えるのが、現場のプロがやっている安全なやり方です。
ステップ3:カスタムルールで特定の攻撃を即時ブロック
マネージドルールセットだけでは防げない、自社サイト特有の攻撃や、特定の国からの怪しいアクセス、あるいは特定の悪いボット(自動プログラム)の動きには、 「カスタムルール」 を自分で作って対応します。
例えば、「特定の怪しいパス(例: /admin-login-secret.php など)にアクセスしてきたら、問答無用でブロックする」というルールのイメージです。
{
"Name": "BlockSpecificBadPath",
"Priority": 20,
"Statement": {
"ByteMatchStatement": {
"SearchString": "/admin-login-secret.php",
"FieldToMatch": {
"UriPath": {}
},
"TextTransformations": [
{
"Priority": 0,
"Type": "LOWERCASE" // 大文字小文字を区別せずにチェックします
}
],
"PositionalConstraint": "EXACTLY"
}
},
"Action": {
"Block": {} // 条件に一致したらブロックする
},
"VisibilityConfig": {
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "BlockSpecificBadPathMetric"
}
}
このように、クラウドの標準機能(マネージドルール)をベースにしつつ、自分たちのサービスに合わせて微調整(最適化)していくことが、安全なWebサイト運用の近道になります。
—
5. まとめ:焦らず、一歩ずつ安全なお家を作ろう
いかがでしたでしょうか?
WAFのマネージドルールセットの最適化とい聞くと難しく感じますが、要するに「優秀な警備員さんに、うちのお客さんの特徴を教えて、働きやすく(誤検知を防ぎやすく)してあげること」です。
最初から完璧にやろうとせず、まずはログを見て、どんなアクセスが来ているのかを知ることから始めてみてくださいね。
安全なインフラ作りは、日々の小さな積み重ねから始まります。一歩ずつ、着実にスキルアップしていきましょう!
コメント