EC2のPublic DNSの有効/無効で攻撃数に違いはあるのか？

# 概要

　どこで聞いたのかは定かではないが、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、アンチウィルスの導入も検討したほうがいいかもしれないですね