- 侵入検知のためのログ解析
- 1 - はじめに
-
ログ解析
は侵入検知の観点において最も見落とされがちな項目の一つである.今日,全てのデスクトップにアンチウィルスソフトが,企業では複数のファイアーウォールがあり単なるエンドユーザでさえ最新のセキュリティ関連ツールを購入している.
しかしながら,誰がそれらのツールが収集した全ての情報を見て監視しているだろう? さらに悪いことに,誰があなたのウェブサーバ,メールサーバや認証結果のログを見ているだろう? webalizerを使った,あなたのウェブログのきれいな利用統計について述べているのではない.私はいくつかのイベントと誰も気づかないような致命的なセキュリティ情報について述べる. もし管理者がログの監視に注意すれば,多くの攻撃は起こらないのではないか.あるいは,早期に対策がとれるのではないか. -
我々はログ解析は簡単である,または,基本的には毎日,すべてのログを手動で見るべきであると言いたいのではない.もちろん,それらは困難であり一般的に非常に大きなサイズであるから自動的なログ解析は必要不可欠である.いくつかの機能を持った解析ツールを使うべきである:
-ログの理解.何が良くて,何が悪いのかを知る.
-悪いイベント同士を関連づけることで攻撃か侵入の傾向のパターンを探す.
-悪いイベント同士と良いイベント同士を関連づける. (例,多数のログイン失敗の後のログイン成功など).
-良いイベント同士を関連づける.(例,同一ユーザによる多 数のホストへのログイン成功が短時間のうちに非常に多い場合など).
-良い,悪いログリストに含まれていないような通常とは違うパターンの検索.
もちろんこれらすべてのステップを行うことは簡単ではない.このドキュメントの主な目的はウェブやプロキシー,認証のログに含まれる特定のパターンを関連づけることで幾つかの驚異を検知できるようにする方法を示すことである.我々は OSSEC HIDS を例として使っている.なぜなら,我々がここで言及したすべての解析だけでなく多くのログ形式に対するルールを持ち,簡単に関連づけを行ってくれるからである.
- 2 - プロクシーログ解析
- プロキシーログ解析を参照するとき,通常 squid を例とする.なぜならウェブプロキシーとして最も一般的に使用されているからである squid が正確に実装されているとき,すべてのトラフィックはユーザ側における外部の設定なしにプロキシーを通過する.なぜなら,ユーザがアクセスしてるすべてのページにアクセスするからである.あなたのネットワークや内部からのトラフィックであるためにプロキシーのログ解析による検知が一般には非常に重要であるのに気づく. プロキシーのログを監視することで以下のような幾つかの問題を見つけることができる:
- 2.1 - 内部ユーザの外部システムへのスキャンか攻撃
- 基本的には,全ての時間でユーザは存在しないページにアクセスし, squid は HTTP エラーコード(通常は 404 か 403) を記録する.もし,同じ送信元IPで短い時間の間に複数の400エラーコードを見つけた場合,フラグをあげるべきである.もし,ユーザが到達不可能なリンクにアクセスし,誤検知を起こしたのならば,.gif,.jpg,.png (それ以外も)などの拡張子は取り除く.この手法を使えば,内部ユーザが外部システムか外部サイトより情報の収集,または,スキャンを試みていることを検知できる.ネットワーク型の侵入検知システム(NIDS),あるいはシグネチャを用いた解析はこれを見逃す.
- 2.2 - ワームかトロイ,ウィルスに感染した内部ユーザ達
- 多くのワームはウェブサイトか外部ページへ特定の方法でアクセスする.それらのアクセスは内部の感染ユーザを示しており検知できる.例えば,W32.Beagle ワームの場合,感染マシンは "xxx3.php" か "blst.php"にアクセスしようと試みてワーム制作者に感染拡大を知らせる.そのログのエントリを発見した場合,何か間違っていると気づくだろう.以下は感染したユーザに対する OSSEC のアラートの例である:
- 2.3 - ネットワーク内の不正ユーザ達
- 幾つかのプロキシーはユーザからの認証を要求する.ユーザが正確な信任状を持たない場合,ログが生成される.もし,一つか二つの認証エラーを見つけた場合,それは単にパスワードを忘れただけかもしれない.しかしながら,同一の送信元IPから複数のエラーが見られることは,何かしら悪いことが発生してることのシグナルである.(特に異なるユーザ名が使われてる場合など) squid より生成された以下の二つの認証エラーメッセージを見てください:
- 2.4 - プロキシーの不正利用やアクセス違反
- ウェブプロキシーを設定する場合,おそらくプロキシーはウェブトラフィックにのみ使うだろう.しかしながら,一部のユーザは幾つかのプロトコルを偽装することで外部へのEメールの送信やブロックされている他のプロトコルの外部転送などの不正利用を試みる.例えば,squid 共通の問題はユーザがEメールの転送に使おうとすることである.メール転送はポート25番へのリクエストを拒否するように修正することで簡単に拒否することができるが,さらに誰かが転送を試みようとするだろう. 通常は使われない任意のポートへのアクセスを監視することで攻撃的なユーザ達を見つけることができる.以下はメール転送を試みる内部ユーザのアラートである:
- 2.5 - ポリシー違反
- 一部の会社では勤務中の外部ウェブメールやポルノサイトへのアクセスを許可していない. squid により,それらのアクセスを直接ブロックできるが,誰が禁止されたページへアクセスしようとしてることを知る必要がある. ログ解析を使うことで,希望しないウェブサイトのリストや警告,ブロックすべき IP のリストを作ることができる.OSSECにおいてデフォルトではこの機能は有効化されていない,なぜなら各会社によってそれぞれのポリシーがあるからである.しかし,共通のウェブメイルサイト,ポルノの IP/サイト,ゲームサイト等の長いリストを用意している.
OSSEC HIDS Notification.
2006 May 11 11:00:00
Received From: (web-proxy) 192.168.2.1->/usr/local/squid/var/log/access.log
Rule: 5054 fired (level 12) -> "Infected machine with W32.Beagle.DP.'"
Portion of the log(s):
524 192.168.2.204 TCP_MISS/404 590 GET http://www.ordendeslichts.de/intern/xxx3.php? - DIRECT/81.201.107.6 text/html
3571 192.168.2.204 TCP_MISS/404 470 GET http://www.levada.ru/htmlarea/images/xxx3.php? - DIRECT/62.118.252.213
466 192.168.2.204 TCP_MISS/404 543 GET http://www.etype.hostingcity.net/mysql_admin_new/images/xxx3.php? - DIRECT/217.158.10.80 text/html
516 192.168.2.204 TCP_MISS/404 423 GET http//www.deadlygames.de/DG/BF/BF-Links/clans/xxx3.php? - DIRECT/81.169.145.95 text/html
528 192.168.2.204 TCP_MISS/404 423 GET http://stroyindustry.ru/service/construction/xxx3.php? - DIRECT/217.16.16.135 text/html
950 192.168.2.204 TCP_MISS/404 686 GET http://service6.valuehost.ru/images/xxx3.php? - DIRECT/217.112.42.95 text/html
505 192.168.2.204 TCP_MISS/404 1368 GET http://schiffsparty.de/bilder/uploads/xxx3.php? - DIRECT/212.227.94.133 text/html
1134746808.068 34 10.1.2.3 TCP_DENIED/407 2675 GET http://www.test.com/ user NONE/- text/html
1096907971.215 4 10.1.2.4 TCP_DENIED/407 3715 GET http://www.microsoft.com/isapi/redir.dll? - NONE/- text/html
OSSEC HIDS Notification.
2006 May 12 07:05:12
Received From: (web-proxy) 192.168.2.1->/usr/local/squid/var/logs/access.log
Rule: 5051 fired (level 10) -> "Multiple attempts to access forbidden file or directory from same source ip.'"
Portion of the log(s):
0 192.168.2.135 TCP_DENIED/403 1382 CONNECT 65.54.245.104:25 - NONE/- text/html
2 192.168.2.135 TCP_DENIED/403 1378 CONNECT 4.79.181.14:25 - NONE/- text/html
0 192.168.2.135 TCP_DENIED/403 1390 GET http://www.ebay.com/ - NONE/- text/html
3 192.168.2.135 TCP_DENIED/403 1378 CONNECT 4.79.181.14:25 - NONE/- text/html
5 192.168.2.135 TCP_DENIED/403 1392 GET http://www.yahoo.com/ - NONE/- text/html
6 192.168.2.135 TCP_DENIED/403 1384 CONNECT 66.135.192.123:80 - NONE/- text/html
2 192.168.2.135 TCP_DENIED/403 1380 CONNECT 66.94.230.75:80 - NONE/- text/html
420 192.168.2.135 TCP_DENIED/403 1390 GET http://www.ebay.com/ - NONE/- text/html
6 192.168.2.135 TCP_DENIED/403 1384 CONNECT 66.135.192.123:25 - NONE/- text/html
- 3- ウェブログ解析
- 一部の人々はウェブアプリケーションに対する攻撃を検知するためにSnort のようなネットワーク型侵入検知システム(NIDS)を信用している.しかしながら,多くの NIDS はウェブトラフィックに対しての相関関係エンジンは良くなく,内部エラーやリターンコードなどの多くの重要な情報を見逃す.もしサイトが SSL を利用していた場合は,NIDS は完全に役に立たない.このような一部の問題は自分たちのウェブのログを監視することで検知することができる:
- 3.1 - ウェブのスキャンか情報収集
- 誰かがあなたのシステムへ違法アクセスを試みたとき,彼(彼女)はおそらくアプリケーションの脆弱性を探索するだろう(awstats や phpbb の古いバージョンなど).これに対してウェブサーバは多数の400エラーメッセージを生成するだろう.もし,短い時間感覚において同一の送信元IPで多くを検知した場合,フラグをあげることができる.サイトに到達不能リンクがあるような場合は誤検知なるため,.gif,.jpg,.png 拡張子などは除く(squid のログと同様に).以下はウェブスキャンによる多数の404エラーの例である(xmlrpc の探索):
- 3.2 - ウェブアプリケーションに対する攻撃の成功と失敗
-
NIDS は攻撃の発生に対してアラートを発する前に一部の特定の内容を見るだけである.しかしながら,ログ解析を使うと攻撃がどうなったかを見ることができる.さらによいのは,NIDSでは不可能なSSLコネクションのログを見ることができることである. 小さいルールの集合によって,SQL インジェクションや ディレクトトラバーサル問題,コマンド実行の試み,幾つかの他の攻撃を検知することができる(それらが成功したかどうかも知ることができる).
例えば,SQLインジェクションの検知するために, select や where,from のようなSQLコマンドを探す.コマンド実行の試みを検知も同様に,cat, grep, wget, dir, ls など全てのシステムが持っているようなコマンドの集合を監視する必要がある.スペース,改行やヌル文字列も探す.なぜならこれらはコマンド実行の試みにおいて広く使用(あるいは必要と)されているからである.ウェブログに対する OSSEC ルールは多くの情報を含んでいる.
例えば,awstats への二つの攻撃において.一部の共通するコマンドがあり,urlに分離記号と通常使用されない文字列が見られる.HTTPの結果コードを探し,一つは成功で残りが失敗(404, 200)であるのを知るとする.この情報にアクセスすると成功の重大性を増加し失敗の重大性を最小化する.OSSECにおいて,共通したウェブ攻撃に対してはこのように行う.もし,攻撃が成功した場合,重大性は増加し即座に管理者へ警告し active-response を実行する. - 付け加えると,何が起きているかを探すために以下のウィンドウズと mrgt 攻撃の一部の他の例を示す:
- 3.3 - ウェブサーバの問題
- ログを調べるとウェブサーバ上の多くの問題が検知される.例えば,以下のエラーは監視していないのなら気づかない(OSSECによるメールでのアラート通知など):
100.149.117.1 - - [13/Jan/2006:01:03:30 -0200] "POST /blog/xmlrpc.php HTTP/1.0" 404 288
100.149.117.1 - - [13/Jan/2006:01:03:31 -0200] "POST /blog/xmlsrv/xmlrpc.php HTTP/1.0" 404 295
100.149.117.1 - - [13/Jan/2006:01:03:32 -0200] "POST /blogs/xmlsrv/xmlrpc.php HTTP/1.0" 404 296
100.149.117.1 - - [13/Jan/2006:01:03:33 -0200] "POST /drupal/xmlrpc.php HTTP/1.0" 404 290
100.149.117.1 - - [13/Jan/2006:01:03:35 -0200] "POST /phpgroupware/xmlrpc.php HTTP/1.0" 404 296
100.149.117.1 - - [13/Jan/2006:01:03:36 -0200] "POST /wordpress/xmlrpc.php HTTP/1.0" 404 293
100.149.117.1 - - [13/Jan/2006:01:03:44 -0200] "POST /xmlrpc/xmlrpc.php HTTP/1.0" 404 290
100.149.117.1 - - [13/Jan/2006:01:03:46 -0200] "POST /xmlsrv/xmlrpc.php HTTP/1.o
a.b.c.d - - [13/Jan/2006:01:07:21 -0200] "GET /awstats/awstats.pl?configdir=|echo;echo%20YYY;cd%20%2ftmp%3bwget...;echo%20YYY;echo|HTTP/1.0" 404 291
a.b.c.d - - [14/Jan/2006:01:01:25 -0200] "GET /cgi-bin/awstats.pl?configdir=|echo;echo%20YYY;cd%20%2ftmp%3bwget...;echo%20YYY;echo|HTTP/1.0" 200 291
a.b.c.d - - [12/Apr/2006:08:05:46 -0300] "GET /rpc/..%%35%63..%%35%63..%%35%63..%%35%63/winnt/system32/cmd.exe?/c+dir+c:\\+/OG
HTTP/1.0" 400 294 200.179.154.180 - - [12/Apr/2006:08:05:47 -0300] "GET /cgi-bin/%2E%2E%2F%2E%2E%2F%2E%2E%%4E%4E%54%2F%73%79%73%74%65%6D%33%32%2Fping.exe%20127.0.0.1
200.255.5.3 - - [12/Apr/2006:08:05:43 -0300] "GET /cgi-bin/mrtg.cgi?cfg=/../../../../../../etc/passwd HTTP/1.0" 404 289
200.255.5.3 - - [12/Apr/2006:08:05:43 -0300] "GET /cgi-bin/mrtg.cgi?cfg=/../../../../../../winnt/win.ini HTTP/1.0" 404 289
OSSEC HIDS Notification.
2006 May 12 04:40:17
Received From: (web-server) 10.1.1.25->/var/log/apache/error_log
Rule: 102 fired (level 7) -> "Unknown problem somewhere in the system.'"
Portion of the log(s):
*** glibc detected *** corrupted double-linked list: 0xb7daca0c ***
OSSEC HIDS Notification.
2006 May 10 16:41:31
Received From: (intra-server) 10.1.2.41->/var/log/apache/error_log
Rule: 102 fired (level 7) -> "Unknown problem somewhere in the system.'"
Portion of the log(s):
[client 201.25.30.140] PHP Fatal error: Allowed memory size of 31457280 bytes exhausted (tried to allocate 39518206 bytes) in /home/site/htdocs/components/com_search/search.php on line 172, referer: http://www.mysite.com.br/index.php?option=Itemid=5&searchword=+SNORT+%2B+MYSQL+%2B+APA
- 4- 認証ログ解析
- 認証メッセージの解析は非常に重要である.第一に,誰が何にいつアクセスしたか明らかに分かる.第二に,誰かがアクセスすべきでない何かにアクセスしている場合を見付けることが出来る.また,時間の参照とシステムユーザによるアクセスの試みから内部の不正利用を割り出すことが出来る.付け加えると,ブルートフォース攻撃や他のパスワード推測問題を検知できる.
- 4.1 - ユーザアクセスはどうあるべきか
- 多くのログ解析ツールはログインの失敗の試みにもとづいて警告するのみである. しかしながら,正規ユーザがデバイスにアクセスした場合,どんなことが起こると仮定していないだろうか?また,アクセスすると彼(彼女)はどのように振る舞うべきでないだろうか? 解析中,アクセスが許可されている全てのユーザとシステムの基準を作る必要がある.この手法は OSSEC で使われており FTS (First Time Seen) と呼ばれる.ユーザがシステムにアクセスする全ての時間で,OSSECが今までで見たことがないアクセスならば,アラートを生成する.初日の間,OSSEC は余分なアラートを起こすことで,どのユーザがどのシステムにアクセスできるかを"学習"させる.しかしながら,しばらくたったら基準が作成され,基準から逸脱したアクセスに対してのみ警告する. FTS により,ネットワーク内の不正ユーザやユーザにより本来すべきでないアクセスを見つけることができる.
- 4.2 - システムユーザからのログイン
- システムユーザは計算機上でのローカル操作などでのみ使われ,ログインでは決してみられるべきではない.もし ssh,telnet,ftp 経由や他の手法で計算機へ任意のシステムユーザのアクセスが見られたら,フラグをあげる必要がある. それらはアプリケーションやプロセスが乗っ取られていることを示しているかもしれない. OSSEC は apache, mysql, nobody, portmap, www, bin, などのシステムユーザのリストを持っており,それらを特定するのに非常に役立つ.nobody ユーザがログインした際の OSSEC のアラートの例:
- 4.3 - 多数のログイン失敗
- 総当たりや辞書攻撃が非常に多くなってきているが,認証ログを監視することでそれらをブロックすることができる.第一に,短い期間の間に同一IPから多数のログイン失敗を見つけたら,攻撃の可能性がある.第二に,異なるIPから多数のログイン失敗を見つけた場合,おそらく分散攻撃か内部に間違ったシステムのせいである.以下はSSHD 総当たり攻撃に対する OSSEC のアラートである:
- 4.4 - 多数のログイン失敗の後のログイン成功
- これは非常に深刻なイベントである.同一の送信元IPより複数のユーザと複数のパスワードで攻撃が見られた後にログイン成功したとすると,攻撃者は恐らくついてる.多くのエラーの後,正規ユーザがパスワードを忘れたかもしれない.これも正しいが,誤検知の原因である.しかしながら,多数のユーザに対する攻撃であり,誤検知率は下がる.
OSSEC HIDS Notification.
2006 May 12 08:59:45
Received From: (auth1) 192.168.20.55->/var/log/messages
Rule: 1601 fired (level 12) -> "System user sucessfully logged on the system.'"
Portion of the log(s):
sshd[23410]: Accepted password for nobody from 10.1.2.3 port 42802 ssh2
OSSEC HIDS Notification.
2006 May 11 21:17:07
Received From: /var/log/messages
Rule: 1512 fired (level 10) -> "SSHD brute force trying to get access to the system.'"
Portion of the log(s):
sshd[9370]: Failed password for invalid user admin from 200.30.175.162 port 58257 ssh2
sshd[9370]: Invalid user admin from 200.30.175.162
sshd[9368]: Failed password for invalid user fluffy from 200.30.175.162 port 58212 ssh2
sshd[9368]: Invalid user fluffy from 200.30.175.162
sshd[9366]: Failed password for invalid user slasher from 200.30.175.162 port 58109 ssh2
sshd[9366]: Invalid user slasher from 200.30.175.162
sshd[9364]: Failed password for invalid user sifak from 200.30.175.162 port 58030 ssh2