web-dev-qa-db-ja.com

ログインしようとしたパスワードをログに記録する方法は?

MichalHrušeckýのオープンソースルーターについて presentation を見ていました。プレゼンテーションでは、彼は彼らの「サービスとしてのハニーポット」の提供と、それが攻撃者によって試みられたパスワードを見ることができるようにする方法を示しました。

彼らはそれをどのように行うのですか? Linuxサーバーでパスワードの試行を記録することは可能ですか?

2
pandita

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
...
_
7
MechMK1

混乱の原因は、「Linuxで」パスワードをログに記録する方法に疑問があることだと思います。ただし、これは実際には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プロトコルはユーザーのパスワードをサーバーに送信する必要があるため、ユーザーのパスワードを簡単に記録させることができます。

3
Conor Mancone