본문 바로가기

프로그래밍/Security

SSH(Secure Shell)

원격으로 로그인할 때, 누군가 sniffing하는 것을 발견할 수 있다. Telnet과 다르게 SSH는 data를 암호화하여 전송함으로서 sniffing에 의해 credential이 노출되는 것 방지한다. 

SSH는 기술적으로 websocket으로 connection을 맺을수도 있지만, 보통은 TCP를 이용하여 connection을 맺는다. 

 

SSH의 packet은 다음과 같이 구성되어 있다 (RFC 4253)

Packet Length Padding Amount Payload Random Padding Message
Authentication Code
(MAC)

 

Packet length는 패킷의 길이를 의미한다.

Padding Amount는 Random padding의 길이를 의미한다.

Payload는 packet의 content를 의미한다. Compression이 협상되었다면, bandwitdh를 고려하여 compression될 수 있다. 

Random padding은 임의의 길이의 padding이다. 기본적으로 encryption을 한다고 해도 traffic을 분석함으로서 추론을 통해 여러가지를 알아낼 수 있는데, 이를 어렵게 하는데 사용된다. 

Message Authentication Code는 데이터가 조작되지 않았다는 것을 확인하기 위한 코드이다. 

 

Packet length, MAC을 제외한 나머지 부분은 Encrypted되어 전송되는데, 이 때 사용하는 암호화 방식은 client와 server에 의해 협상되고, 약한 암호화 알고리즘은 사용되지 않도록 설정할 수도 있다. 

 

Client는 여러 termial을 창에 띄워두고 각각 SSH를 통해 multiple connection을 하나의 Server와 맺는 channel을 구성할 수 있다. 예를 들어, 하나는 업로드 용으로, 하나는 다운로드 용으로 사용하는 방식이다. 

 

출처:

https://youtu.be/5JvLV2-ngCI?si=21wVwlGv_P3Q5ykW

 

https://www.omnisecu.com/tcpip/ssh-packet-format.php#google_vignette

 

SSH Packet Format

 

www.omnisecu.com