概要
どこで聞いたのかは定かではないが、EC2のPublic DNSを有効にしていると攻撃されやすいと勝手な思い込みがあったので、その思い込みを解消するためにPublic DNSが有効とPublic DNSが無効(Public IPのみ)のEC2インスタンスそれぞれにWebサーバ(Apache)を立て、それらのWebサイトに対する攻撃数とその攻撃内容について紹介したいと思います
※検証期間は1週間(期間が短いかもしれないが・・・)
※ここで言う攻撃とは攻撃に向けたスキャンニングのことを指します
結論
Public DNSの有効/無効による攻撃数の違いはなかった
攻撃数の違いは同一ホストによる大量攻撃によるもので、Public DNS有効でも運次第で同じ結果になるかと思います
Public DNS | 有効 | 無効 |
---|---|---|
攻撃数 | 64 | 209 |
攻撃元IP数 | 31 | 32 |
※攻撃数・・・攻撃と思われるログの件数
※攻撃元IP数・・・攻撃元IPのユニーク数
攻撃内容
以下では攻撃元がスキャニングして残したアクセスログを紹介します
\x03と\x16\x03\x01
httpポートにhttps通信をしようとした時にApacheが残すログらしい
これで何の脆弱性をつくのかはわかりませんが・・・
GET /.DS_Store
Macユーザならお馴染みの隠しファイルです
ファイル、フォルダなどの設定に関するメタデータを記録するファイルです
うっかり公開ディレクトリにあるとそこからのファイル構成なども筒抜けになってしまう
GET /.git/config
gitユーザならお馴染みのgitの設定ファイルです
リポジトリ名、ユーザ名、認証キーの場所など機密性の高い情報が記録されているファイルです
リポジトリからCloneしたソースをそのまま公開していると意図しないコンテンツが公開されてしまいますので、
.htaccessなどのように拡張子ベースの公開制限しましょう
GET /.hg/hgrc
分散バージョン管理であるMercurialの設定ファイルになります
gitと同様のため省略
GET /.svn/wc.db
中央型バージョン管理システムであるSVNのメタファイル(SQLite)になります
gitと同様のため省略
GET /.ssh/id_rsa
これはもうそのままですね。。。SSHの秘密鍵をそのまま公開ディレクトリに置いちゃったパターンですね
GET /.well-known/security.txt
SSL証明書を発行するときの「ファイル認証」方式で申請した際の一時ファイル
通常であれば所有者の確認ができ次第削除しなければならない
考えられる脆弱性としては本人確認されるまでに一定のタイムラグがあるため、
未認証の状態でたまたま攻撃者にこのファイルが見つかり、横取りされる?のかな
例:http://valuessl.net/sslwords/domain_fileauth.html
GET /ccvv
不明
GET /currentsetting.htm
「NETGEAR Genie」というルータ用のユーティリティソフトが片っ端からこのcurrentsetting.htmにアクセスしているっぽい(マルウエアか?)
GET /index.action
StrutsのWebアプリケーション
Struts関連の脆弱を突く攻撃が待ち構えているだろう・・・
GET /sftp_config.json
Sublime Text3のFTPプラグインであるSFTPの設定ファイル(正しくはsftp-config.json
)
このファイルをそのまま公開ディレクトリにアップロードしたりすることで、FTPサイトのパスワードやファイル構成などが漏洩すると思われる
Gh0st\xad
トロイ?
POST cgi-bin/php
URLエンコードした状態でPOSTしてきたので、以下のようにデコードした結果
POST //%63%67%69%2D%62%69%6E/%70%68%70?%2D%64+%61%6C%6C%6F%77%5F%75%72%6C%5F%69%6E%63%6C%75%64%65%3D%6F%6E+%2D%64+%73%61%66%65%5F%6D%6F%64%65%3D%6F%66%66+%2D%64+%73%75%68%6F%73%69%6E%2E%73%69%6D%75%6C%61%74%69%6F%6E%3D%6F%6E+%2D%64+%64%69%73%61%62%6C%65%5F%66%75%6E%63%74%69%6F%6E%73%3D%22%22+%2D%64+%6F%70%65%6E%5F%62%61%73%65%64%69%72%3D%6E%6F%6E%65+%2D%64+%61%75%74%6F%5F%70%72%65%70%65%6E%64%5F%66%69%6C%65%3D%70%68%70%3A%2F%2F%69%6E%70%75%74+%2D%64+%63%67%69%2E%66%6F%72%63%65%5F%72%65%64%69%72%65%63%74%3D%30+%2D%64+%63%67%69%2E%72%65%64%69%72%65%63%74%5F%73%74%61%74%75%73%5F%65%6E%76%3D%30+%2D%64+%61%75%74%6F%5F%70%72%65%70%65%6E%64%5F%66%69%6C%65%3D%70%68%70%3A%2F%2F%69%6E%70%75%74+%2D%6E
URLデコード結果
POST //cgi-bin/php?-d allow_url_include=on -d safe_mode=off -d suhosin.simulation=on -d disable_functions="" -d open_basedir=none -d auto_prepend_file=php://input -d cgi.force_redirect=0 -d cgi.redirect_status_env=0 -d auto_prepend_file=php://input -n
Apache Magica攻撃らしい
http://d.hatena.ne.jp/ozuma/20131103/1383413495
GET /manager/html
Tomcatの管理ツール
外部公開しないのが鉄則かと
デフォルトパスを変更するか、アクセス制限をかけるなどの対策が必要
phpMyAdmin
PHPアプリケーションを管理するためのWebアプリケーション
外部公開する場合は使わないのが鉄則かと
どうしても使わなければならない場合は、デフォルトパスを変更(下記の命名はしないように)するか、アクセス制限をかけるなどの対策が必要
phpに関連してphpinfo
も気を付けましょう!
下記のアクセスログはほとんど同一のホストからのものです
Public DNS無効の攻撃数が多い原因でもあります
- /w00tw00t.at.blackhats.romanian.anti-sec
- /phpMyAdmin/scripts/setup.php
- /phpmyadmin/scripts/setup.php
- /pma/scripts/setup.php
- /admin/phpmyadmin/scripts/setup.php
- /admin/phpMyAdmin
- /admin/pMA/
- /admin/scripts/setup.php
- /admin/sqladmin/
- /admin/sysadmin/
- /admin/web/
- /admin/db/
- /admindb/scripts/setup.php
- /administrator/admin/
- /administrator/db/
- /administrator/phpmyadmin/
- /administrator/phpMyAdmin/
- /administrator/pma/
- /administrator/PMA/
- /administrator/web/
- /apache-default/phpmyadmin/scripts/setup.php
- /_PHPMYADMIN/scripts/setup.php
- /_pHpMyAdMiN/scripts/setup.php
- /_phpMyAdmin/scripts/setup.php
- /_phpmyadmin/scripts/setup.php
- /2phpmyadmin/
- /db/dbadmin/
- /db/db-admin/
- /db/dbweb/
- /db/myadmin/
- /db/phpmyadmin/
- /db/phpmyadmin3/
- /db/scripts/setup.php
- /dbadmin/scripts/setup.php
- /dbadmin/
- /db/websql/
- /db/webadmin/
- /PMA2011/
- /PMA2012/
- /PMA2013/
- /PMA2014/
- /PMA2015/
- /PMA2016/
- /PMA2017/
- /PMA2018/
- /phpmyadmin3/
- /phpmyadmin4/
- /phpmyadmin2011/
- /phpmyadmin2012/
- /phpmyadmin2013/
- /phpmyadmin2014/
- /phpmyadmin2015/
- /phpmyadmin2016/
- /phpmyadmin2017/
- /phpmyadmin2018/
- /sql/phpmanager/
- /sql/myadmin/
- /sql/scripts/setup.php
- /sql/websql/
- /sqlmanager/
- /sql/sqlweb/
- /mysql/dbadmin/
- /mysql/admin/
- /mysql/pma/
- /mysql/scripts/setup.php
- /mysqladmin/scripts/setup.php
- /xampp/phpmyadmin/scripts/setup.php
- /forum/phpmyadmin/scripts/setup.php
- /cpphpmyadmin/scripts/setup.php
WordPress
もっと使われてるOSSブログソフトウエア
PHP製ということもあり、phpAdminと関連して攻撃対象になる(WordPress狙いでphpAdminへの攻撃が多いのも原因かもしれない)
こちらも同様に管理者のパスを変更するか、アクセス制限をかけましょう
- /wp/wp-login.php
- /wp-login.php
- /wordpress/wp-login.php
- /blog/wp-login.php
- /wp-content/plugins/portable-phpmyadmin/wp-pma-mod/
cgi
- /cgi/common.cgi
- /cgi-bin/test-cgi
まとめ
今回の検証はあくまでもWebサーバにhello world
を表示する1枚モノのHTMLでしたが、業務システム、Webアプリケーション、WordPressなどを運用する際にはセキュリティ対策を改めて考えなければならないと思いました。上記にあげていないものも数多くあるかと思いますが、最低限開発中に使用しているファイル(.gitファイル、管理者ツール、ビルド環境)は外部公開ディレクトリに配置しないこと。それ以外はプログラム、ミドルウェア、OSの脆弱性対応や接続元の制限(セキュリティグループ、.htaccessなど)を見直しましょう。余裕があればWAF、アンチウィルスの導入も検討したほうがいいかもしれないですね