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를 루트만 읽을 수 있는지 확인하십시오. 자세한 내용은 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 도커 이미지를 생성하여 모든 비밀번호 기록매우 간단합니다. 기본적으로 비밀번호 확인을 위해 관련 위치에 한 줄을 추가해야 합니다.

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 허니팟을 고려할 수도 있습니다. 종종 이러한 도구에는 공격자의 전체 셸 상호 작용 기록과 같은 암호 기록 이상의 기능이 포함됩니다. 예:

그러나 나는 이것에 대한 경험이 없습니다.

관련 정보