https://code-boki.tistory.com/135
이 글에서 간단하게 telnet과 ssh의 차이점에 대해서 알 수 있다
https://code-boki.tistory.com/142
그리고 이전 포스팅 글도 참고하면 좋다
일전의 테스트와 같이 내 개인 맥북 2개로 SSH를 실습하며 동작과정을 알아볼 것이다
현재 맥북(SSH 클라이언트) - 192.168.123.101
whoami
ifconfig | grep inet | grep 192.168.123
접속할 맥북(SSH 서버) - 192.168.123.104
whoami
ifconfig | grep inet | grep 192.168.123
telnet은 데이터가 평문으로 전송되고, ssh는 데이터를 암호화해서 전송한다고 한다
정말일까?
Telnet(23)
1. telnetd 사용
서버 - 192.168.123.104
macOS에는 기본적으로 telnet관련 패키지가 설치되어 있지 않다
- telnet 설치
brew install telnetd
- telnet 서버 실행
telnetd -debug
telnet 서버(192.168.123.104)의 23번 포트에서 대기
클라이언트 - 192.168.123.101
- telnet 서버 접속
telnet 192.168.123.104
인증(로그인) 후 명령어 테스트
인증(로그인) 후 여러 명령어 테스트
telnet > wireshark로 패킷분석
- 필터링
tcp port 23 and host 192.168.123.104
- Follow TCP Stream
아이디(usename)와 비밀번호를 입력하는 부분부터.. 키보드제어/화면제어 하는 부분을 제외하면 echo hero 등등..
서버와 클라이언트가 무슨 내용을 주고받았는지 확인할 수 있다
2. nc 사용
서버 - 192.168.123.104
nc 커맨드를 사용해서 23번 포트에서 listening
nc -l 23
클라이언트 - 192.168.123.101
telnet 명령어로 서버에 접속
telnet 192.168.123.104
메시지 주고받기
hello
hi
my name is boki
wow, you are very handsome
thank you. you are so nice
telnet > wireshark로 패킷분석
- 필터링
tcp port 23 and host 192.168.123.104
- Follow TCP Stream
이번에도 서버와 클라이언트가 무슨 내용을 주고받았는지 확인할 수 있다
SSH(22)
서버 - 192.168.123.104
클라이언트 - 192.168.123.101
ssh 192.168.123.104
ssh 커맨드로 서버에 접속
접속 후 명령어 테스트
telnet > wireshark로 패킷분석
- 필터링 및 Follow TCP Stream
tcp port 22 and host 192.168.123.104
23번 포트를 사용하는 telnet과 다르게 ssh는 22번 포트를 사용한다
뭔가 알 수 없는 문자들이 계속 쓰인다.. 이 중에 눈여겨 볼거는 diffie-hellman-group이란 키워드이다
찾기로 echo 라는 글자를 찾아도 안보인다
Conclusion(결론)
https://code-boki.tistory.com/135
이 글에서 SSH에 대한 내용을 보면 SSH 클라이언트와 서버간에 세션이 만들어지고, 데이터를 암호화해서 전송한다고 했다
이 때 서로 데이터를 주고받을 때 암호화/복호화 때 사용할 대칭키(세션키)가 생성이 되고, 교환이 이루어지게 된다
이 때 대칭키(세션키)를 주고 받을 때 사용하는 알고리즘은 위에 SSH 패킷 분석에서 나온 diffie-hellman 알고리즘을 사용한다
그리고 이 대칭키로 서로 주고받는 데이터를 암호화하는 것이다
SSH의 연결이 끊어지면 이 대칭키(세션키)는 더 이상 사용할 수 없게된다
그래서 세션(Session) 키 라고 부르는 것이기도 하다
SSH의 흐름에서 중요 키 포인트를 나열하면
1. 최초 접속 이후 클라이언트의 known_hosts에 쓰인 접속했던 서버의 공개키와 현재 접속할 서버의 공개키를 비교해서 등록된 서버가 맞는지 확인한다
=> 간단한 검증
2. ID(unix에서는 username)와 password 또는 개인키를 서버로 전송해서 인증을 거친다. 이때 개인키 인증인 경우 서버의 authorized_keys 파일에 클라이언트의 공개키와 쌍을 맞춰서 알고리즘을 풀 수 있어야 접속이 가능하다
=> 인증
3. 암호화된 세션을 생성하고, 이 위에서 클라이언트와 서버는 통신을 하며, 디피-헬만 알고리즘을 통해 데이터를 암/복호화 한다
=> SSH 터널링
결국 SSH는 접속시 비대칭키(공개키) 사용, 인증시 옵셔널하게 비대칭키(개인키) 사용, 데이터를 주고받을 때는 대칭키(세션키)를 사용한다
마지막으로 패킷 분석(감청)은 법적으로 처벌 받을 수도 있다
나는 개인 노트북으로 테스트를 하였다
'OS > Unix' 카테고리의 다른 글
pts, tty(feat. w, who, /dev) (1) | 2024.01.02 |
---|---|
원격 서버 접속하기(4) - ssh 접속(feat. 개인키/공개키로 접속) (2) | 2023.12.01 |
원격 서버 접속하기(3) - ssh 접속(feat. 개인키/공개키 파일 생성) (2) | 2023.11.30 |
댓글