varエンジニアブログ

株式会社varのエンジニアブログです。IT初心者から中級者までが楽しめる内容を投稿しております。

ブルートフォース攻撃を体験してみよう

0.読む前に準備して欲しいものと注意事項

今回は自分の用意したサーバーに対して ブルートフォース攻撃 を仕掛けます。
ブルートフォース攻撃に関しては後ほど詳しく説明します。
したがって、事前に準備するものと、必ず守って欲しい注意事項があります。

①.用意する環境

  • Ubuntu 18.14 LTS 環境のサーバー

    下記の記事を参考に、AWSのEC2インスタンスを用意するのも良いと思います。
    ※その際はSSHをパスワード認証に設定するのを忘れないでください。

engineering.var.co.jp

②.注意事項

  • 本記事で紹介した内容の実践は、自分の用意した環境内のみ で行ってください。
    他人のサーバーに攻撃を仕掛けるのは犯罪であり、法で罰せられます。



1.ハッキングとは


パスワード認証などを採用しているシステムに対して総当たり攻撃をすることを
ブルートフォース攻撃 と言います。

今回はブルートフォース攻撃を通して、クラッキングの怖さとセキュリティの大切さについて、実践を通して学んでいきましょう!



2.ブルートフォース攻撃を仕掛ける準備をする(攻撃準備編)

今回はブルートフォース攻撃を仕掛けるために使うツールをダウンロードするのですが、ネット上に公開されているツールは攻撃用途に使うためではなく、 「自分の環境を守るため」 に使用するものです。セキュリティ上の脆弱性がないかを、攻撃を通して実際に確認していくのです。

まずはパッケージ管理ツールを更新します。以下のコマンドを打ってください。

$ sudo apt update

「apt」とは、Ubuntuにおける パッケージ管理ツール です。Apache, MySQL, Firewalldなどの有名なソフトウェアやツールは「apt」を使ってインストールします。CentOSAmazon Linuxには「yum」という別のパッケージ管理ツールが存在します。様々な場面で使用するので、覚えておきましょう。

更新が完了したら、早速ブルートフォース攻撃に使うツールをインストールしていきます。
以下のコマンドを打ってください。

$ sudo apt install hydra

「hydra」はブルートフォース攻撃を行う際に使うツールです。
インストールが完了したら以下のコマンドを打って、hydraの説明文を見てみましょう。

$ hydra

英語で「hydra」に関する説明が書かれていますね。興味のある方は是非読んでみてください。
なお、一番上の文は注意書きで 「軍事や機密組織内、及び法に反するような用途で使わないでください」 と記されています。そういった目的で使うのは絶対にやめましょう。


さて、準備段階もこれで最後となります。
今回はパスワードの候補が多く書かれているテキストファイルを元に、ブルートフォース攻撃を仕掛けます。github上にあるサンプルファイルをダウンロードしましょう。
まずはホームディレクトリ上に「samplefiles」というディレクトリを作成し、その中にサンプルファイルをダウンロードします。ホームディレクトリに戻ってから、以下のコマンドを打ってください。

$ mkdir samplefiles
$ cd samplefiles
$ wget https://raw.githubusercontent.com/danielmiessler/SecLists/master/Passwords/Common-Credentials/500-worst-passwords.txt

wget」とは、 指定したURLのファイルをダウンロード するのに使用するコマンドです。

以上で攻撃するための準備は完了です。
続いて、被害対象となるユーザーを作成していきます。

3.ブルートフォース攻撃を仕掛ける準備をする(被害準備編)

では、攻撃されるための準備をしていきます。
まずはユーザーを作成しましょう。以下のコマンドを打ってください。
ユーザー名は各自で決めてください。その際、出来るだけ長めの名前にしてください。

$ sudo useradd -m -s /bin/bash ユーザー名

すると、今使っているユーザーのパスワードが聞かれるので入力してください。


useraddに使用するオプションについて、1つ1つ解説していきます。

  • 「-m」とは ユーザーの「ホームディレクトリ」 を作成するために付けるオプションです。
    「ホームディレクトリ」はユーザーがログインする際に毎回最初に訪れるディレクトリです。
    cdコマンドを使う際にも特に何もパスを指定しなければ、ホームディレクトリへ移動します。

  • 「-s」とは ユーザーが使用するシェル を指定するためのオプションです。
    「シェル」は ユーザーとカーネルの間の一連のやり取りを仲介 するためのものです。
    ユーザーは直接カーネルに命令したり、処理結果を聞くことは出来ないのです。
    また、「bash」の他にも「sh」や「zsh」など様々なシェルが存在します。


次に、作成したユーザーのパスワードを設定していきます。
パスワードは先ほど攻撃側サーバーでダウンロードしたサンプルファイルの中から、好きな単語を選択しましょう。
では、vimコマンドを使ってサンプルファイルの中身を確認します。

$ vim 500-worst-passwords.txt

パスワード一覧の候補が表示されたと思います。この中から好きな単語を決めてください。
早めに実践を終わらせたい方は比較的上にある単語を選ぶのがお勧めです。


では、確認が終わり次第攻撃側で開いているvimを閉じましょう。

:q!

「q」に「!」を付けると、 保存せず強制終了 することを意味します。うっかりインサートモードで文字を改変してしまった時には、コマンドモードでこのコマンドを入力しましょう。


決めた単語を元に、作成したユーザーにパスワードを設定します。

$ sudo passwd ユーザー名
New Password: サンプルファイルに書いてあった好きな単語

脆弱なパスワードを設定したユーザーを作成出来ましたね。
準備はこれにて終了です。お疲れ様でした!少し休憩しましょう。



4.実際にブルートフォース攻撃を仕掛けてみる。

準備が出来たところでいよいよ「hydra」によるブルートフォース攻撃の実践です。
今回は自分のサーバーから自分のサーバー自身に攻撃を仕掛けます。

早速以下のコマンドを打ちましょう。攻撃が始まります。

hydra -l 攻撃されるユーザー名  -P 500-worst-passwords.txt ssh://localhost

コマンドの詳細について説明する前に、実際にどのように攻撃しているか見てみてください。
しばらく時間が経てば以下の文章が表示されるはずです。

[22][ssh] host: localhost  login: 攻撃対象のユーザ名  password: 攻撃対象のユーザーのパスワード
1 of 1 target successfully completed, 1 valid password found

以上の内容が表示されればブルートフォース攻撃が成功したことになります。


「-l」はユーザー名、「-P」は参考にするファイルを選択するオプションです。
今回は自分の作成したユーザーを対象に、サンプルファイルを参考にして攻撃しましたね。
localhost」とは、自分のサーバー自身 を意味する言葉です。
指定したことにより、自分のサーバーから自分のサーバー自身に攻撃をしました。


以上で実践は終了となります。今回実践したことを元に、どうしたら自分のサーバーを守れるかについて次項で考えていきましょう。



5.どうやったら自分のサーバーを守れるか考えてみる

ブルートフォース攻撃を実践したことで、その恐ろしさを実感出来ましたか?
このようにパスワードの設定が甘いと、他人から簡単に侵入されてしまうわけです。
では、我々のサーバーはどのようにして守っていくのでしょうか。自分自身で考えてみましょう。
考え終わったら下にスクロールしてくださいね!







いくつか思いつきましたか?
では、どのようにして守っていくのか。その対策方法についていくつか確認していきましょう。

  • 公開鍵認証のみを使用する (そもそもパスワード認証を採用しない)
  • パスワード自体を難しいものにする
    最低8桁。キーボードの配列(1234...etc)や、よくある単語(testや人の名前 etc...)は使わない!

  • SSHのポート番号を変更する (22 → 違う数字へ)

  • 「fail2ban」 をインストールする
    事項では最後に、この「fail2ban」について詳しく説明します。



6.「fail2ban」をインストールしてみよう

これまでに私たちはブルートフォース攻撃の怖さを体験し、その対策方法について考察しました。
一番早いのはそもそもパスワード認証を採用しないことですが、それは環境によってはなかなか難しいですよね。
しかし、パスワードを難しいものにしたり、SSHのポートを変更したとしてもいつかは侵入されてしまう可能性があります。
そこで、上記2つの対策に加え「fail2ban」という対策ソフトウェアをインストールして更に強固なサーバーにしていきます。まずは実際に、「fail2ban」をインストールしましょう。

$ sudo apt install fail2ban

インストールできたら「fail2ban」の設定を新たに作成します。
以下のコマンドを打ってください。

$ sudo vim /etc/fail2ban/jail.local

何も書いてない新しいファイルが作成され、編集画面になると思います。
以下の文章をコピペしてください。

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.*
maxretry = 6

設定の内容について簡単に解説します。

  • 「enabled = true」は この設定を有効にする という設定
  • 「port = ssh」は sshのポートを監視 する設定
  • 「filter = sshd」は ログファイルの中でsshdと書いてある行を参考にする という設定
  • 「logpath = /var/log/auth.*」は どのログファイルを参考にするか という設定
  • 「maxretry = 6」は 6回失敗したらログイン元IPアドレスファイアウォールによってブロックされる という設定


以上で「fail2ban」の導入は完了です。
余裕のある方はサーバーをもう1台用意して、「fail2ban」が入っている方のサーバーに先程と同じ手順で攻撃してみてください。途中でファイアウォールによってブロックされ、「hydra」による攻撃が失敗します。


攻撃側のIPアドレスがブロックされたことを確認するには、以下のコマンドを被害側サーバーで打ちます。

$ sudo iptables -L

すると、攻撃したサーバーのIPアドレスREJECT されているのが確認できます。
このように、「fail2ban」を導入すると ブルートフォース攻撃による複数回のアクセスを無効化する ことができます。

以上で本記事の内容は全て終了しました。お疲れ様でした!



6.最後に

今回はブルートフォース攻撃の恐ろしさと、その対策方法について実践を通して学べたかと思います。本日学んだことを参考に、今後の勉強やセキュリティ対策に役立てて頂けると幸いです。

古里塾ではこのようなハンズオン形式を含めた授業を月に8回、ライブ講義にて行っています。
興味のある方、そして価値のあるエンジニアになりたいという方は古里塾のHPをご覧ください。 furusatojuku.site


また、varエンジニアブログの管理人 古里栄識のLine@では以下の内容を発信しています。
(2020年12月時点:登録者数750名)

  • おすすめのプログラミング言語
  • 初心者がやりがちな意味のない勉強法
  • おすすめの優良記事
  • 簡単な質問対応

特に、勉強方法について困っていることがあれば質問してみるのもお勧めです!
以下の URLから古里栄識のLINE@を登録できます。
https://landing.lineml.jp/r/1654804352-xmngLnqd?lp=Ld9S5W