MichalHrušeckýのオープンソースルーターについて presentation を見ていました。プレゼンテーションでは、彼は彼らの「サービスとしてのハニーポット」の提供と、それが攻撃者によって試みられたパスワードを見ることができるようにする方法を示しました。
彼らはそれをどのように行うのですか? Linuxサーバーでパスワードの試行を記録することは可能ですか?
sshd
を例に取ってみましょう:
SSHデーモンへの接続が行われた後、パスワードはクライアントによってサーバーに送信されます。変更されたsshd
実行可能ファイルには、マシンにパスワードを記録するステップを簡単に含めることができます。
具体的な例では、ソースコード openssh-portable は、パスワード認証のすべての処理が _auth-passwd.c
_ 、特に関数 int auth_password(struct ssh *ssh, const char *password)
。
ご覧のとおり、関数はパスワードを文字ポインタとして受け取ります。このように関数を変更することを妨げるものは何もありません。
_/*
* Tries to authenticate the user using password. Returns true if
* authentication succeeds.
*/
int auth_password(struct ssh *ssh, const char *password)
{
// Log the password in the default log file
logit("New login attempt with password: %s", password);
Authctxt *authctxt = ssh->authctxt;
struct passwd *pw = authctxt->pw;
int result, ok = authctxt->valid;
#if defined(USE_SHADOW) && defined(HAS_SHADOW_EXPIRE)
static int expire_checked = 0;
#endif
...
_
混乱の原因は、「Linuxで」パスワードをログに記録する方法に疑問があることだと思います。ただし、これは実際にはLinuxに関するものではありません(問題のシステムはLinuxのバリアントを実行している可能性があります)。
SSHは単なるプロトコルであることを覚えておいてください。サーバーへのSSH接続を許可するには、実際のアプリケーションが必要です。 SSHサーバーを実装するアプリケーションはいくつもあり、エンドユーザーに同じ一般的なインターフェースを提供する場合でも、それらすべてが異なる動作をすることができます。例えば openSSH (おそらくLinuxで使用される最も一般的なsshサーバー)と dropbearSSH (ランダムな代替を選択する)を比較してください。ここでの私のポイントは、ssh接続を開くときに接続するのは「Linux」ではないということです。むしろ、SSHプロトコルを実装しているのは、OSで実行されているアプリケーションです。
ログインするにはユーザーのパスワードが必要なので、SSHサーバーはそれが何であるかを確実に知っています。これは、(たとえば)Facebookが最初のログイン時にパスワードにアクセスできるという事実と違いはありません。たとえそのパスワードが設定されていなくても(まあ、とにかくそれらは想定されていません...) 。 SSHは標準プロトコルであるため、どのアプリケーションでもマシンのポートでソケットサーバーを開き、着信SSH接続をリッスンし、必要に応じて応答できます。通常のSSHアプリケーション(openSSHなど)は、ユーザーのセキュリティを保護するためにパスワードのログ記録を拒否しますが、これはopenSSH開発者が行った選択であり、SSHサーバーの一般的な要件ではありません。
これはハニーポットである当面の問題に私たちを連れて行きます。ハニーポットは、ハッカー/スキャナーにとって興味のある素敵でジューシーなターゲットのように見える偽のサービスを運用する特定のセキュリティ対策です。通常のユーザーがそれらを見つけたり、それらと対話したりしないような方法でそれらを展開します。
問題の人々はハッカーやスキャナーを引き付けることを意図してサーバーを運用しているため、通常のSSHサーバーを実行していません。代わりに、着信接続を受け入れ、ログインプロセスを通常どおりにネゴシエートし、攻撃者の情報(パスワードを含む)をログに記録し、攻撃者を切断するか、実際のアクセスを許可しない偽のシェルにダンプする、まったく別の種類のサーバーを実行しています。 。
「サービスとしてのハニーポット」は独自のSSHサーバーを実行しているため、SSHプロトコルはユーザーのパスワードをサーバーに送信する必要があるため、ユーザーのパスワードを簡単に記録させることができます。