*1  SSHに対するブルートフォース攻撃への対策

sshd へのパスワード総当たり攻撃は今年の前半くらいから非常に増えていて、「実際に guest や test などのアカウント名を乗っ取られた」と言うケースも実はそこそこの頻度で聞いている。仕事では既に防御スクリプトを仕込んでいるサーバもあるが、無防備なサーバに実際にどれくらいの攻撃が来ているのか、ログを見てみた。

*2  存在しないユーザへの攻撃

sshd へのアクセスが失敗すると、少なくとも FreeBSD や Debian では /var/log/auth.log にメッセージが残る。上が存在しないユーザ、下が存在するユーザへの総当たり攻撃ログの例

Nov 8 11:29:47 example sshd[81317]: Failed password for invalid user jiseitai from 211.93.0.248 port 59039 ssh2
Nov 8 11:29:47 example sshd[81317]: Failed password for root from 211.93.0.248 port 59039 ssh2

これを ruby のワンライナーで名前の部分だけ切り出してみる。以下で使ったのは某所サーバの 11月分のログ。
# grep -c invalid /var/log/auth.log
18125
# ruby -e '
names = Array.new
File.open("/var/log/auth.log").each do |line|
  if /invalid user (\w+) from/ =~ line then
    names.push $1
  end
end
puts names.uniq.join(", ")' > list
# wc list
    1   8367   68752
8,367種類のアカウント名で、約18,000回もアタックしてきているようだ。

*3  攻撃元 IP アドレス

上記の ruby ワンライナーを少し変えて ip アドレスを抽出してみる。
# ruby -e '
ips = Hash.new(0)
File.open("/var/log/auth.log").each do |line|
  if /Failed password for .+ from ([0-9\.]+) port/ =~ line then
    ips[$1] += 1
  end
end
ips.sort{|a,b| b[1]<=>a[1]}.each do |ip, count|
  puts "#{count} - #{ip}"
end'
という感じで。先の攻撃は見てみると 50 IP Addresses から来てるようだ。100件越えが 17件で、うち 1,000件越えが以下の 4件

5,272 - 219.240.75.45 (HANANET-HIGHBAN-MANTECH, Hananet Korean - hanaro.com)
3,387 - 211.93.0.248 (UNICOM, China United Telecommunication Corp. - cnuninet.com)
3,134 - 64.251.25.85 (INFOLINK-BLK-100, Infolink Information Services Inc. - infolink.com)
2,609 - 8.3.7.89 (LVLT, Level 3 Commucations, Inc. - level3.com)

whois で調べてみると、韓国、中国、米国という見事に典型的な攻撃元になっている。

*4  総当たり攻撃を防御するスクリプトや仕組み

こうした攻撃を防衛するには、例えば sshd の待ち受け port を標準の 22/tcp から変更したり、knockd を使って port を閉じたり、または ssh のパスワードによる認証を切ってしまう方法がある。しかしどれもユーザに通知なり利用形態の変更を強いるため、大勢で使っている場合には多少導入し辛い。と言うことでサーバ側で攻撃アクセスのみを拒否する仕組みがあると便利なことも多い。

原理としては基本的に上記のようなログから 攻撃元の IP アドレスを抜き出して deny するものと、フロー制御的に短時間に複数回数の ssh アクセスがあった場合に deny する方法がある。
maxlogins.pl
FreeBSD 用となっているが hosts.allow に追加する形なので Linux あたりでも使えそう。ログに複数回の ssh login failure があると IP アドレスを deny に追加する
sshdfilter
これも原理は似たようなもので、libwrap の代わりに iptables を使うのが異なる点。当然 *BSD では使えないけど、ipf に書き換えればいい気もする。
Blocking repeated failed login attempts via SSH
これも似たようなもの。
ipt_recent
これは Linux iptables の ipt_recent モジュールを使って一定時間内の同一 IP アドレスからの繰り返しアクセスを拒否する仕組み。
ログ解析を使うものは、当然リアルタイムの対応はできないし、ある程度の頻度でログのスキャンを行う必要があるのでログの肥大化には気をつけた方がいいだろう。

*5  SSH brute force 攻撃からサーバを守る - まとめ

最初に挙げた春山さんのものと結局たいして変わらないわけだが一応書いとく。
  1. 特定IPアドレスのみからのアクセスを許可し、他は全拒否する
  2. sshd の listen port を 22/tcp から他の任意の port に変更する
  3. パスワードによる認証を禁止する (PasswordAuthentication no, ChallengeResponseAuthentication no)
  4. 総当たり攻撃の防御スクリプトを導入する
    • ログから攻撃を検知し、libwrap や iptables, ipf 等で拒否
    • iptables の機能を使って同じIP空の連続アクセスを自動拒否
ちなみに ssh での root login を許可 (PermitRootLogin yes) し、しかもパスワード認証可能になっているのは、現時点では激しくお勧め出来ない。当然ながら telnet はそもそも起動しないか IPアドレスでアクセス元を絞ること。

( Permalink | Comments (2) | tags: security  )
SSHに対するブルートフォース攻撃への対抗策のまとめ([ssh:00251] Re: FYI: SSHサーバーへの攻撃が増加傾向,侵入後はフィッシング・サイトに悪用も) を、新山さんがssh@koka-in.orgメーリングリストに投稿して下さいました。以下はメールからの引用です。 標準でないポート (22/tcp以外) を使う.....
2. SSH ポートへの攻撃 from ぷらぷらブログ at 2005-11-21 14:55
サーバ機の設定などには SSH と通してコマンドラインで行っている。(Xサーバは...
3. Diary/2005-12-27 from PukiWiki Plus! (PukiWiki/TrackBack 0.3) at 2005-12-27 15:16
[memo] SSH への総当たり攻撃(brute force attack)と防衛 http://yoosee.net/d/archives/2005/11/08/002.html
4. Diary from PukiWiki Plus! (PukiWiki/TrackBack 0.3) at 2006-01-11 20:03
&lt;&lt; 2006.1 &gt;&gt; [Diary] 日 月 火 水 木 金 土 1 2 3 4 5 6 7 .....
昨日までは ccs-tools パッケージに含まれているサンプルプログラムの紹介をしてきました。 ccs-tools パッケージには含まれていないサンプルプログラムが他にもたくさんあります。 しかし、公開許可が出ていないので紹介することができません。 そのため、とりあえずネタ切.....
6. Brute Force from ゲーム関連リアルタイム価格情報 at 2006-03-25 00:44
&nbsp;&nbsp;&nbsp;4人のエリート戦士から構成される小隊、ブルートフォースを率い、6つのワールドをまたにかけて戦い抜いていくアクションシューティングだ。戦いをくり広げる戦士たちは驚異的な戦闘能力とそれぞれに異なった特殊スキルを持つスペシャリスト。戦闘の状況に応じて彼らを使い分けてゲームを進めていく。 &nbsp;&nbsp;&nbsp;約30種類用意された武器は、近距離用のもの.....
Comments
1. PANDA at 2005-12-01 13:51
強制アクセス制御を利用して認証を多重化すれば全然怖くないかも。利用者には少し負担が増えるけど、ぐっと安心できるようになりますよん♪
http://sourceforge.jp/pro ... /2/winf2005.pdf
2. EroTDJ at 2009-02-01 23:45
ひとことコメントを残汁桴潭瑳映档漏関与慫極瑩慳慮散盖載爾叭刑綬漏関容蠖鏡虻綬眇艝世旦殆誉旭杰鏡虻綬眇艝世蜘區鏡虻綬眇艝世馳抱漏関与浴慫楴潴極振整瑳眇艝世値甦迎噤振整瑳眇艝世男卆鯵肝戸癩矍絛殆噫數捩港桧浴畳極漏関与汳漠極瑩档漠牴晨普湯獵捩渠楴整畴敲睥漠慳敬楴楷桴慴獲で穩産瑩慳慮散盖載爾辧栄澡繭産漏関与慥浴据極慶楴湯愼敲矍絛殆噫數捩敷浴牧渠愼敲矍絛殆噫數捩猯 ̄湯含嘴建滲産瑩慳慮散盖載爾辧蔚繭盖睥潴産漏関与 ̄敷瑳慣慥極産瑩慳慮散盖載爾曼漫営来瑳極愼敲振整瑳眇艝世胆◆唄迎噤産瑩慳慮散盖載爾甸斎叮瞥癪管梓稽誇豚平鏡虻綬眇艝世地翰畄敷楴極桴

Please write your comment. email address won't appear. Cannot use any HTML tags in comment.
コメントをお書き下さい。メールアドレスは公開されません。 またHTMLタグは利用できません。
Name   E-mail   URL
Comment

About W.W.Walker

World Wide Walker は yoosee による blog です。PDA, Web・サーバ技術, 美味しい食べ物などの話題を取り上げています... read more

このエントリーのブックマーク

Monthly Archives

Select Month to read