SSHログインパスワードの試みを記録する方法は?

SSHログインパスワードの試みを記録する方法は?

SSHパスワードの試みを記録する必要があります。 opensshにパッチを適用してこれを行うことができることをどこかで読んだが、これが正しい方法であるかどうかはわかりません。

私はアーチを使用しています。

編集する:

人々が私のシステムにアクセスするために推測したいパスワードを知りたいです。 Journalctlで使用するか、テキストファイルにスタックすることができます。その人が1234に入って接続しようとすると、次のようなものが欲しい。

ユーザー「admin」とパスワード「1234」でSSHログインに失敗しました。

答え1

より良い答えは、ユーザー名、パスワード、ソースIPとポート、クライアントソフトウェアとバージョンを記録するopensshのハックバージョンであるLongTail SSHハニーポットをダウンロードすることです。

インストールスクリプトは次の場所にあります。https://github.com/wedaa/LongTail-Log-Analytic/blob/master/install_openssh.sh

分析もしています。http://longtail.it.marist.edu

答え2

これを行うには、(1) authpriv にログインし、(2) authpriv を root のみ読み取ることができることを確認します。詳細については、syslog.confまたはrsyslog.confを参照してください。次に、ソースコードをクラックする必要があります。ある時点で、通話のためにパスワードが図書館に送信されますcrypt。その前に、ロギングコードを使用して入力文字列をロギングします。 SSHコードをハッキングすることに加えて、LD_PRELOADを使用してcrypt呼び出しを傍受することもできます。その後、sshdデーモンを起動し、LD_PRELOAD環境変数を新しいライブラリに設定する必要があります(1回または2回呼び出す)。

セキュリティを強化するには、対称キーを使用して出力文字列を暗号化することをお勧めします。これは優れたセキュリティではありませんが、良いパスワードが誤って公開されるのを防ぎます(sshdが自分のパスワードをキャプチャし、画面にauthprivエントリが表示されている間に誰かが通過する場合)。

LD_PRELOADを使用してlib呼び出しを傍受する方法の詳細については、以下を参照してください。https://rafalcieslak.wordpress.com/2013/04/02/dynamic-linker-tricks-using-ld_preload-to-cheat-inject-features-and-investigate-programs/

Cでsyslogを実行するには: http://www.gnu.org/software/libc/manual/html_node/Syslog-Example.html。 SSHコードをクラックすると、ロギング機能がすでに存在します。コピーして必要に応じて変更します。

答え3

SFTPパスワードを回復しようとしたときに、この問題が偶然発見されました。

私は同じ挑戦に直面した将来の人々のために2つの完全な作業事例を準備しました。

バリエーション 0: OpenSSH パッチ

パッチ付きOpenSSHドッカーイメージを作成してすべてのパスワードを記録するとても簡単です。デフォルトでは、パスワードを確認するために関連する場所に1行を追加する必要があります。

sed -e 's/^\([ \t]*\)\(struct passwd \*pw = authctxt->pw;\)/\1logit("Login attempt by username '\''%s'\'', password '\''%s'\''", authctxt->user, password);\n\1\2/' -i auth-passwd.c

これは単に変換されます

    struct passwd \*pw = authctxt->pw;

到着

    logit("Login attempt by username '\''%s'\'', password '\''%s'\''", authctxt->user, password);
    struct passwd \*pw = authctxt->pw;

バラよりパッチを含むDockerfile完全なビルドプロセスの詳細をご覧ください。

バリアント 1: 独自の SSH サーバーの作成

OpenSSHが固定要件であるか、または代替SSH実装も効果があるかどうかはわかりません。 OpenSSHが厳密に要求されない場合は、次のことができます。JavaでApache Minaを使用してすべてのパスワードを記録するSFTPサーバーを作成する

Apache Minaにパスワードログインを接続する重要な部分は、インターフェースを実装することですPasswordAuthenticator

package de.metamorphant.examples.chattysshd;

import org.apache.sshd.server.auth.AsyncAuthException;
import org.apache.sshd.server.auth.password.PasswordAuthenticator;
import org.apache.sshd.server.auth.password.PasswordChangeRequiredException;
import org.apache.sshd.server.session.ServerSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LoggingPasswordAuthenticator implements PasswordAuthenticator {
    private static Logger logger = LoggerFactory.getLogger(LoggingPasswordAuthenticator.class);

    @Override
    public boolean authenticate(String username, String password, ServerSession session)
            throws PasswordChangeRequiredException, AsyncAuthException {
        logger.debug(String.format("Login attempt by user '%s' with password '%s'\n", username, password));
        return false; // Authentication with our dummy server always fails
    }
}

その後、それをサーバーに注入する必要があります。

...
    SshServer sshd = SshServer.setUpDefaultServer();
...
    sshd.setPasswordAuthenticator(new LoggingPasswordAuthenticator());
...

見てApache Minaを使用して実装された暗号化SFTPサーバーの完全な作業例もっと学ぶ。

バリエーション 2: 事前設定されたハニーポットツールの使用

ユースケースに応じて、本格的なSSHハニーポットを検討することもできます。多くの場合、これらのツールには、攻撃者のフルシェルインタラクション履歴など、パスワード履歴以上の機能が含まれます。例:

しかし、私はこれについての経験はありません。

関連情報