技術者ブログ

クラウド型WAF「Scutum(スキュータム)」の開発者/エンジニアによるブログです。
金床“Kanatoko”をはじめとする株式会社ビットフォレストの技術チームが、“WAFを支える技術”をテーマに幅広く、不定期に更新中!

2018年11月

        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  
  • お問い合わせはこちら
Scutum開発者/エンジニアによる技術ブログ WAF Tech Blog

IPレピュテーションでウェブアプリへの攻撃は防げるか

はじめに

IPレピュテーションはIPアドレスそのものの信頼性をスコアリングし共有する手法で、主にスパムメール対策において使われてきました。しかし近年では(他社さんの)WAFがウェブアプリケーションへの攻撃を防ぐためにIPレピュテーションを利用する、というケースが増えてきたように感じます。

筆者は、あくまで個人的な感覚としてですが、「IPレピュテーションはウェブの攻撃検知・防御では役に立たないだろう」と思っていたのですが、今回これを客観的に評価してみることにしました。

何を調べるか?

IPレピュテーションというのは要するに「一度(あるいはそれ以上)悪さをしたIPアドレスは、次から許さないぞ」というアプローチです。つまりあるIPアドレスからの最初の攻撃に対しては無力ですが、一度攻撃を見つけたら、次からはそのIPアドレスからの攻撃を防ぐことができる、ということになります。

そのため調べるべきなのは、「あるIPアドレスから、2つ以上のウェブサイトに攻撃が行われるという事が、どの程度発生しているか」です。

集計結果

Scutumは2500以上のウェブサイトで利用して頂いており、その大半が日常的に多くのアクセスがあるサイトであるため、あるIPアドレスが横断的に複数のウェブサイトに攻撃している状況をデータとして観測することができます。今回はここ数ヶ月の間にScutum上で観測された攻撃元のIPアドレス、約36000について調査しました。

36000のうち、たった1つのウェブサイトについて攻撃が観測されたものは約23500、65%存在していました。つまり攻撃の6割以上はIPレピュテーションではまったく防ぐことができないことになります。(ただし、あくまでこれはScutum上で観測されたデータなので、より多くのウェブサイトを対象にデータを集めることができれば、もう少しこの率は下がることが考えられます。)

また、2つのウェブサイトにのみ攻撃してきたIPアドレスは4200ほどありました。これらについて考えてみれば、攻撃してきた2つのウェブサイトのうち、1つめのウェブサイトへの攻撃はIPレピュテーションでは防げないことになります。このことも考慮に入れると、より高い率でIPレピュテーションは役に立たないということになります。

iprep_pie

全体に占める割合がわかるようにパイチャートにしました。図の青い部分は「1つのウェブサイトのみについて攻撃が観測されたIPアドレス」、赤い部分が「2つのウェブサイトへの攻撃を観測したIPアドレス」、紫は「3〜10のウェブサイトへの攻撃を観測したIPアドレス」で、これらで大部分を占めます。緑は「11〜100のウェブサイトへの攻撃を観測したIPアドレス」で、それ以上攻撃してきたIPアドレスはオレンジになります(これはごくわずかです)。

攻撃例

最も派手な動きを見せたのは85.25.*.*のアドレスで、合計676のウェブサイトにおいてこのIPアドレスからの攻撃が観測されました。これは下記のようなHTTPリクエストを送ってきていました。

POST /user/register?element_parents=(中略)wrapper_format=drupal_ajax HTTP/1.1
Accept-Encoding: identity
Content-Length: 153
Host: www.example.jp
Content-Type: application/x-www-form-urlencoded
Connection: close
User-Agent: Python-urllib/2.7

mail(中略)post_render%5D%5B%5D=printf

これはDrupalに対する攻撃です。なりふり構わず撃ちまくり、どこかに侵入できればラッキー、と考えているのだろうと思われます。User-Agentも偽装することなくそのままで、非常に雑な攻撃です。

2番めに派手だったのは47.75.*.*のアドレスで、こちらは493のウェブサイトに攻撃してきていました。内容は同様にDrupalを狙ったもので、次のようなHTTPリクエストです。

POST /?q=user%2Fpassword&n(中略)=markup HTTP/1.1
Accept-Encoding: gzip, deflate
Accept: */*
User-Agent: 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
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache
Pragma: no-cache
Host: www.example.jp
Connection: keep-alive
Content-Length: 47

_triggering_elem(中略)m_id=user_pass

こちらはUser-AgentをChromeとしています。ヘッダの種類や並びが先に紹介したものと異なっているので、使用しているツールが異なるのであろうことが推測できます。

インターネット上のレピュテーション情報は役に立つか

こちらの他社さんのWAF(AWS WAF)のブログ記事において、3つの、インターネット上で誰でも利用可能な(評判の悪い)IPアドレスのリストが紹介されていました。今回、こちらの記事を参考にさせていただきました。(AWSさんありがとうございます。)

Scutum上で実際に観測した攻撃のIPアドレスが、このようなIPレピュテーションのリストに含まれるのかどうかを調べてみました。

1つめのSpamhausのリストはかなり広いレンジを含むものでしたが、Scutumで観測した約36000個の攻撃元IPアドレスのうち、このリストに含まれるものはわずか185個でした。

2つめのProofpointのEmerging Threats IP listに含まれるものは0個で、まったく含まれていませんでした。

3つめのTorのExit Nodeのリストに入っていたのは270個でした。

つまりこれらのリストで見つけられたのはわずかに全体の1%程度であり、これらを使ったIPレピュテーションはウェブの攻撃検知・防御においてはほぼ役に立たないと言えます。もちろん上記3つ以外にももっと良いリストがある可能性はありますが、WAFに関するブログ記事で紹介されているリストでもこの程度しか見つけることができない、というのは、IPレピュテーションの効果の限界を示す一つの指標として考えてよいだろうと思います。

まとめ

今回はScutumで実際に観測したデータを中心に、IPレピュテーションが実際にどの程度役に立つのかを客観的にデータを使って調べてみました。3割程度は確かに有効のようですが、WAFのメインの防御策には成り得ないと言えるでしょう。やはり、IPアドレスのみにとらわれることなく、実際にHTTPリクエストの中身を毎度解析して防御するという形がWAFのコアの防御策となります。