筆者はUbuntu環境のApache設定で
- 不審なIP/NWをブロック
- 過剰にアクセスしてくるクローラーをエージェントで判別してブロック
というセキュリティ対策を取っています。(詳細)
しかし、これは相手もその辺りの呼吸をわきまえていて、
- まだブロックされていない/もしくは攻撃者がよく使うASN「ではない」アクセス元から
- 正常なアクセスを装って
- 情報を袖手したり攻撃の糸口をつかもうとする
パターンが割とあります。今回、それを検知した時のお話。
不自然に見えたログ
例によってURLとIPアドレスはダミーですが、以下のような奇妙なログを見つけました。
192.0.2.10 - - [27/Mar/2026:10:28:03 +0900] "GET /images/?1770681132 HTTP/1.1" 404 5506 "-" "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.4601.1280 Mobile Safari/537.36"
一見、ただの404エラーではありますが、強烈な違和感を覚えました。
違和感1「古いAndroid端末」
Android 5.0は、2018年頃に公式セキュリティサポート終了。GooglePlay開発者サービスも2024年7月には終わっています。
違和感2「古いChrome」
同じくChrome60。これも2017年と古いバージョンです。
違和感3「TLS1.3貫通」
そんな古いAndroidが筆者のサイトにアクセスできるということはまず、あり得ません。種を明かしてしまうと、筆者のWebサイトは
#SSL対応
SSLEngine on
Protocols h2 http/1.1
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 -TLSv1.2
として、TLS1.3未満のアクセスができないようになっています。 この暗号化形式をサポートするようになったのはAndroid10以降。
結論:エージェント偽装。
古いAndroidが新しいSSL暗号が施されたサイトには、そもそもアクセス不可能です。リクエストの段階でハンドシェイクが拒否されるため、404エラーどころかWebサイトそのものが見られません。
しかし、上記のアクセスログは「古いAndroidのバージョンからTLS1.3のSSLログが残る」。つまり、残る結論はほぼ「エージェントを偽装してくるクローラー」に限られます。
アプリ開発者が Conscrypt(Google製のセキュリティライブラリ)などをアプリに同梱している場合は、Android 4.4以降の古い端末でもアプリ単位でTLS 1.3通信を行える場合がありますが、そんな回りくどい方法はないでしょう
措置:新たなエージェント拒否を追加。
筆者の「厄介なエージェントを拒否する」仕組みがこちら。
- apache側
(省略)
# botのアクセスリストを外部ファイルから読み込む
Include /etc/apache2/conf-enabled/bad-bot-list.conf
(省略)
<RequireAll>
# bad_bot変数がセットされていたらアクセスを拒否
Require not env bad_bot
# それ以外は許可
Require all granted
</RequireAll>
- bad-bot-list.conf
SetEnvIfNoCase User-Agent "facebookexternalhit/1\.1" bad_bot dontlog
SetEnvIfNoCase User-Agent "SemrushBot/7~bl" bad_bot dontlog
SetEnvIfNoCase User-Agent "AhrefsBot" bad_bot dontlog
SetEnvIfNoCase User-Agent "MJ12bot" bad_bot dontlog
SetEnvIfNoCase User-Agent "DotBot" bad_bot dontlog
SetEnvIfNoCase User-Agent "Baiduspider" bad_bot dontlog
SetEnvIfNoCase User-Agent "YandexBot" bad_bot dontlog
SetEnvIfNoCase User-Agent "Sogou web spider" bad_bot dontlog
等。この、SetEnvIfNoCase User-Agentの箇所に、以下を加えます。
# Android 10.0未満 を排除する
SetEnvIfNoCase User-Agent "Android [1-9]\." bad_bot dontlog
# 10年以上前の古いOS(Windows XP/Vista等)を装うボットも排除
SetEnvIfNoCase User-Agent "Windows NT [3-5]\." bad_bot dontlog
# その他、不自然な挙動を示すUA群
SetEnvIfNoCase User-Agent "^$" bad_bot dontlog
後は
sudo apache2ctl configtest
sudo systemctl reload apache2.service
で、上記、不自然なログのアクセスはピタリと止まりました。
まとめ
不正アクセスにはユーザーのみならず
- IPアドレス
- ドメイン
はもとより、OSやエージェントを偽装してくる輩も多いので。
だが…………
マヌケは見つかったようだな
ぐらいの勢いでアクセスログを観察していきましょうというお話でした。
コメントを残す