最近、サイト運営の時間がとれず、放置していたので、たまにはログをチェックしようかと三が日からログを読んでいた。
ログは error.log (うちのサーバの場合、ログファイルはvhost毎に変えてるので、標準のログファイル名で書いておく。以下同様。) を眺めて、サイトのコンテンツ絡みの場合は、man もしくは google 先生、明らかにアタックの場合は該当アクセスの IP アドレスを /var/log 内全検索するなどして、分析した。
分かったのは、思ったより脆弱性の入ったサーバやスクリプトが巷には溢れていて、下に列挙していない file does not exist に、大量にそのキーワードが含まれているということ。
自分が入れているツールへのアタックかも、と感じたら、その IP でログの全検索をかけることと、そのツールが最新版か確認することはした方がよさそうだ。
んでわ、さっそく。
- PHP Warning: Unknown: failed to open stream: Permission denied in Unknown on line 0
- PHP Fatal error: Unknown: Failed opening required 'FILEPATH' (include_path='.:FILEPATHES') in Unknown on line 0
- 2行でセット。
旧サイトの投稿スクリプトのパーミッションを 000 にしていたために、出ていた。
パーミッションを変更したら(投稿フォームを無効化してから)、直った。 - Directory index forbidden by Options directive: FILEPATH
- index ファイルを設置してなくて、Indexes をセットしてないディレクトリへのアクセスがあったログ。
index.htm を置けば OK。 - no acceptable variant: FILEPATH
- コンテンツネゴシエーションに失敗。具体的には、MultiView の設定に絡むファイルしかなかった。
だが、telnet アクセスで再現しなかったので、切り分けはこれ以上はできなかった。うーむ…
アクセスログによれば、Majestic-12 とかいうプロジェクトの bot らしい。 - File does not exist シリーズ
- ほとんどが、旧コンテンツのメタタグとかで読み込む設定にしていた旧faviconなど。
あといくつかが、色々な脆弱性へのアタック。目についたのだけ、ピックアップする。 - File does not exist: FILEPATH/w00tw00t.at.blackhats.romanian.anti-sec:)
- phpMyAdmin の脆弱性アタック。
この辺りが詳しい → phpMyAdminを狙った攻撃観察 - ろば電子が詰まっている
そんな軟派なものは入れていないので、関係なし。
w00tw00t.at.hogehoge 自体は、他にも色んな種類があるらしいので、他のアクセスが出てきたらそれはそれで注意が必要ぽい。 - File does not exist: FILEPATH/notify-NotifyUser_NONE_071217
- なんか日本語サイトだと、楽天とか伊藤忠のイントラネットから web アクセスする時に、業務と関係ないサイトにアクセスする時に使う proxy が notify-NotifyUser1 だってネタがひっかかる。
ただ、web サーバにそんなファイルアクセスを起こす意味が分からないので、なんか違うんじゃないかという気がしている。
なおうちへのアクセスでは、AhrefsBot/5.0 という bot によるものらしい。ポートスキャンという説もあるが、うちのサイトでは、web クローラとしての動作のみが記録されていた。外側の FW で落ちているだけかも知れない。 - client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)
- これは DFind のアタックを受けた痕跡らしい。
DFind については、この辺を見たらいいのかな… → Hacktool.DFind | シマンテック 日本
んで、対策は色々と書かれているんだけど、だいたい多いのは iptables の string モジュールで文字列マッチをしてパケットをドロップさせろ、というもの。
(参照: Blocking w00tw00t scans - Myatu's, GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1)
日本語のサイトでは、400 が返ってたら心配ないよ、って書かれてて、多分その元ネタは後者の参照ページあたりだと思うのだけど、なんで you should not worry about it なのかが、見付けられなかった。
少なくとも Hacktool.DFind が正しいのであれば、apache と関係ない SQL サーバへのアタックも含まれているのだから、apache のログだけ見て心配しなくて良い理由が不明。
いちおう、サーバの外側の FW で弾いた上で、サーバ内のソフトウェア FW でも弾くようにしているので、apache 以外のログには残っていないのだと信じたい。 - script not found or unable to stat シリーズ
- 4割が、過去に google calendar に登録していたが現在ではもう登録していない URL へのもの。
他は、色々な php システムのバグへのアタックくさい。 - Invalid URI in request GET HTTP/1.1 HTTP/1.1
- なんか、アタックの最初に "GET HTTP/1.1 HTTP/1.1" をつけてくるツールがあるっぽい。
google の連文節検索(という名前は私が勝手につけたが、よーはハイフンで単語を繋げる検索)で、http-1.1-http-1.1 として検索すれば、大量のログが出てくるので、自分のログと類似のものを探せばよい。
このログが理解できなくて、telnet してたら自鯖の設定ミス(ServerTokens を設定していない)のために HTTP ヘッダに OS と apache のバージョンが流れていることに気付いたので、修正した。
ServerSignature を未設定または Off にすると、エラーレスポンスの末尾の OS や apache バージョンが入ったシグネチャが消えるので安心していたら、HTTP レスポンスで返していたとは…
ちゃんとヘッダまで確認していなかった自分の甘さに反省。 - PHP Notice:
- Undefined variable: comment_field_name in FILEPATH/comment_form.tpl.php on line 64
- 多分、P_BLOG のバグ。reply.php の中で、エラーメッセージ内の .tpl.php を呼ぶ前に、add.php とかみたく $comment_field_name をセットしていないのが原因。
One Reply to “apache のエラーログを真面目に読んでみた”
Comments are closed.