Hydraでパスワードアタック(3) -反省会

Kalilinux

Hydraによるsshパスワード攻撃の話、第3回です。

前々回は攻撃側、前回は守備側を取り上げましたが、今回は反省会です。

それでは守備側としてはどうすれば防御できたのか、対応策の考察です。

sshdの設定ファイル

sshdの設定は以下の2段階になっています。

1.は(恐らく)改編不可です。

なのでもしこれを変更したければ、2.で設定し直します。

そうすると1.に上書きされて2.の設定が有効となり、結果的に設定が変更されます。

デフォルトの設定

デフォルトのsshd設定を確認するコマンドは以下の通り。

結果は以下の通りです。

デフォルト設定その1

1行目、port(ポート番号)  22

6行目、Login Grace Time (ログイン時の猶予時間) 120秒

8行目、maxauthtries(最大試行回数) 6回

9行目、maxsessions(最大接続数) 10回

下から12行目、PubKey Authentication (公開鍵認証) yes

下から2行目、PasswordAuthentication (パスワード認証) yes

sshd1

デフォルト設定その2

sshd2

デフォルト設定その3

sshd3

下から10行目: ” MaxStartups 10:30:100 ” の、

” 10 ” 、 ” 30 ” 、 ” 100 ” の意味は、

という設定を表しています。

sshd_config

上記のデフォルト設定を上書き変更するファイルが、 ” sshd_config ” です。

この設定ファイルは、” /etc/ssh/sshd_config ” にあります。

下記コマンドで閲覧できます。(-n オプションで行番号を付けて例示しています。)

以下はファイルの中身です。

先頭に # のある行はコメントアウトされている行で、無効な行です。

初期段階では殆どがコメントアウトされており、つまりは無効であり、デフォルト設定の方が生き残る設定となっています。

sshd_config その1

14行目 ポート番号:変更時は(#をはずして)この番号を変更します。

32行目 #LoginGraceTime 2m:ログイン時の猶予時間はここで変更(2mは2分=120秒)

35行目 #MaxAuthTrials:最大試行回数はここで変更

38行目 #PubkeyAuthentication yes:公開鍵認証の可否設定

sshd_config1

sshd_config その2

57行目 #PasswordAuthentication yes:パスワードによる認証の可否

sshd_config2

sshd_config その3

103行目 #MaxStartups 10:30:100 この3つの数字の意味は、

を意味しており、この数字を変更設定することが出来ます。

sshd_config3

守備側の防御力を高める対策

ポートの変更

設定ファイルの1行目のポート番号を変更することが出来ます。但しファイアウォールの設定変更(新たなポート番号も開放しておくこと)も同時に必要です。

ポートスキャンされると変更後のポート番号が露見して攻撃されてしまいますが、数多くのサーバーに対して22番ポートだけを決め打ちで攻撃するタイプの攻撃には有効な対策です。

パスワード解読の遅延工作

設定ファイルの103行目 MaxStartupsを例えば ” 2 ” にします。この場合、認証を同時に試行できる人数は2人に制限されます。

MaxStartupsの後の数字を(10 : 30 : 100)のように3つ組の数字とせず、単に1つの数字とした場合はその数字を最大同時試行人数として設定できます。

例えば14人を2人に制限すると解読までの時間が7倍かかる計算になります。

例えば4ヶ月を7倍すると2年4ヶ月となり、解読時間が長くなればなるほどその効果が上がります。

32行目LoginGraceTime、35行目MaxAuthTrialsも似たような遅延効果を得られます。

しかしこれらの変更は解読までの時間を遅延させるだけで、時間さえかければ最終的には解読されてしまいます。

公開鍵認証の設定とパスワード認証の禁止

PubkeyAuthentication yes :公開鍵認証の設定はデフォルトで既にyesとなっています。

公開鍵認証による接続を可能にした後で、

57行目 PasswordAuthentication :これを ” no ” とするとパスワード認証が出来なくなり、公開鍵認証のみ接続可能になります。

そうすればパスワードで認証しようとするhydraなどのonline password攻撃は無力となります。

公開鍵認証の設定

以下、鍵ペアの作り方と、配送の仕方、ssh公開鍵接続の仕方です。

鍵ペアの生成

下記コマンドで、 ” ~/.ssh ” ディレクトリに、2つの暗号鍵が生成されます。

ssh-keygen

あれこれ質問してきますが、今回はとりあえず全部パスしてます。

ed25519は暗号化方式(楕円曲線暗号)の一種であり、rsa暗号よりも堅牢のようです。

.sshディレクトリには、秘密鍵 ” id_ed25519 ” と公開鍵 ” id_25519.pub ” の2つが生成されています。

/ssh

設定ファイルの作成

クライアント側に下記設定ファイルを作成します。

ファイル名 ~/.ssh/config

ssh_config

ファイルの内容

Host アクセス先名
Hostname サーバーのホスト名 or IPアドレス
Port ポート番号
IdentityFile ~/.ssh/id_ed25519
User ユーザ名

ssh_config1
ssh

公開鍵のサーバーへの配送

クライアント側からサーバー側に公開鍵をコピーします。

ssh-copy-id

公開鍵の配送先

サーバー側の “~/.ssh/authorized_keys ” に保存されます。

鍵の中身はこんな感じです。

authrized_keys

公開鍵によるssh接続

下記にて公開鍵を使って(パスワードなしで)ssh接続出来ます。

ssh

2回目からは ” ssh サーバーIPアドレス ” だけで、パスワードなしで接続できました。(ユーザ名はサーバー側とクライアント側で同じにしてあります)

パスワード認証の無効化

公開鍵による接続が成功すれば、サーバー側のパスワード認証を無効にしても支障無くなります。

これによりパスワードを用いてのssh接続を禁止出来ます。

以下は、サーバー側の操作です。

設定ファイルの書き換え

サーバーの ” /etc/ssh/sshd_config ” をテキストエディタで開き、

sshd_config

1例としてテキストエディタとしてmousepadで開いています。

57行目を、

PasswordAuthentication no と設定して保存します。

(変更前)

sshd_config1

(変更後):57行目 先頭の#が取れて、最後が ” no ” に変わっています。

sshd_config2

左から3つめのセーブアイコンで保存します。

sshd再起動

その後下記コマンドで、サーバー側のsshdを再起動すると新設定が有効になります。

systemctl restart

なお、上記コマンドではパスワードを訊かれます。下記 ” sudo ” をつけるとパスワード不要になります。

systemctl restart

設定ファイルチェック

本当に変更されているかどうかチェック。

sshd_config
sshd_config1

確かに、 PasswordAuthentication は no になっています。

パスワード認証無効化後の攻撃実験

それでは実際に効果のほどを実験してみます。

sshによる接続

まずは普通にssh接続してみます。公開鍵認証の設定を行なっていますので普通に接続できます。

パスワードは不要です。

ssh

接続される側のログを見るとこんな感じ。1行目に公開鍵が表示されています。

ssh journalctl

hydraによる攻撃

攻撃開始後二十数秒で、「パスワード認証がサポートされていない」との失敗報告が返ってきました。

hydra

攻撃失敗です。

守備側の記録

hdraからの刺客の最初の1人(51942氏)を追い返したら、後に続く人々は最早誰もやってきてません。

hydra_journalctl

まとめ

sshログイン設定を、パスワード認証を禁止して、公開鍵認証だけにすれば(当たり前だけど)Hydraによる攻撃をブロック出来ました。

コメント

タイトルとURLをコピーしました