TCP Connect(Open) 스캔
일반 사용자 권한을 이용해 TCP 포트가 오픈된 상태인지 아닌지를 확인하기 위하여 connect system call을 이용합니다. connect system call을 통해 스캔 대상인 포트가 정상적으로 TCP 연결 설정을 수행하는지 여부를 통하여 스캔하는 방식입니다. TCP 프로토콜 패킷을 사용자가 직접 조작하고 생성하려면 관리자 권한이 필요하여 일반 사용자가 이용하기는 어렵습니다. TCP SYN 스캔 등 대부분의 스캔은 관리자 권한을 이용하여 패킷을 직접 조작하여 스캔하는 방식입니다. 보통 관리자 권한이 없을 경우 일반 사용자 권한으로 포트 스캔을 할 수 있는 TCP Connect 스캔을 사용합니다. TCP Connect스캔은 TCP 연결 설정 과정을 완벽히 수행하며 타겟 호스트의 포트에 직접 연결되어 TCP Open Scan이라고도 불립니다. 단점은 연결 설정 과정을 완벽히 수행하기 때문에 시스템 로그에 스캔한 흔적이 남습니다.
그렇다면 TCP Connect 스캔은 어떠한 순서로 동작할까요?
우선 SYN 패킷을 타겟 호스트의 대상 포트에 전송합니다. 전송 후 포트가 열렸는지 닫혔는지에 따라 다른 응답을 수신합니다. 포트가 열린 상태일 경우 SYN+ACK 응답을 수신합니다. 수신 후 ACK 패킷을 전송하여 TCP 연결을 완료합니다. 이 과정이 connect 시스템 호출 동작 방식입니다. 포트가 닫힌 상태일 경우 RST+ACK 응답을 수신합니다. 포트가 닫혀있을 경우 통신이 끝나버리고 포트가 열려있을 때만 연결 설정이 완료됩니다. 포트가 열린 상태일 때에는 3-way handshake 과정을 거쳐 포트가 열려있는지 확인하고 연결을 종료하기 위한 rst+ack 패킷을 전송하여 연결을 즉시 종료시킵니다. TCP Connect 스캔은 시스템 로그에 스캔을 시도한 ip주소가 남게 됩니다. 포트를 스캔하는 과정에서 TCP 연결 설정이 완료되기 때문입니다.
TCP SYN(half-open) 스캔
이번에는 TCP SYN 스캔에 대하여 알아보겠습니다. TCP SYN 스캔은 관리자 권한으로 TCP 패킷을 직접 조작하여 TCP 포트가 열려있는지 여부를 확인하는 스캔방식입니다. Half Open스캔이라 불리는 이유는 포트 스캔 과정에서 TCP 헤더의 control bit를 조작하여 완전한 TCP 연결 설정과정(3way handshake)을 수행하지 않기 때문에 반만 오픈하는 스캔이라는 뜻입니다.
TCP Syn스캔의 동작에 대하여 알아보겠습니다. Target 호스트의 대상 포트에 SYN 패킷을 전송하여 포트가 열려있는 경우에는 SYN+ACK, 닫혀있는 경우에는 RST+ACK 응답을 수신합니다. 대상 포트가 열려있을 경우 SYN+ACK 응답이 온다면 이 응답만으로도 포트가 열린 상태인 걸 확인할 수 있습니다. 따라서 TCP 연결을 완료하지 않고 RST 패킷을 전송하여 조작을 즉시 중단합니다.
스텔스 스캔 Stealth scan
TCP 연결 설정을 완료하지 않은 상태로 대상 호스트의 포트 오픈 여부를 알아내는 스캔방식으로 스캔 대상 시스템에 흔적을 남기지 않아 스텔스 스캔이라고 부릅니다. TCP 연결 설정을 완전히 수행하지 않기 때문에 대상 시스템에 공격자의 로그가 남지 않고 공격자는 자신의 ip를 노출시키지 않으며 스캔이 가능합니다. 스텔스 스캔의 종류에는 TCP SYN scan, TCP FIN scan, TCP Xmas scan, TCP Null scan 이 있습니다.
TCP FIN/NULL/XMAS 스캔
모두 TCP SYN 스캔과 마찬가지로 TCP 패킷을 조작하여 포트가 열려있는지 확인하는 스캔 방법입니다. 스텔스 스캔 방식이며 TCP 패킷 헤더의 플래그 비트인 URG, ACK, RST, PSH, SYN, FIN을 비정상적으로 설정한 후 스캔합니다. 스캔의 종류마다 비트 설정 방법이 다른데 지금부터 알아보도록 하겠습니다. TCP NULL 스캔은 이름처럼 제어비트를 설정하지 않고 스캔하는 방식입니다. TCP FIN 스캔은 일반적인 연결 종료 패킷인 FIN+ACK을 동시에 설정한 패킷이 아닌 FIN제어비트만 설정한 후 스캔하는 방식입니다. TCP XMAS 스캔은 플래그 비트 중 URG, PSH, FIN 제어비트만 설정하여 스캔합니다. 포트 오픈 여부를 확인하는 방법은 열린 포트일 경우 SYN + ACK, SYN + RST 패킷을 제외한 모든 패킷을 수신할 경우 폐기하고 응답하지 않습니다. 닫힌 포트일 경우 RST패킷을 제외한 모든 패킷에 RST 패킷으로 응답합니다.
'정보보안' 카테고리의 다른 글
정성적 위험분석과 재해복구 시스템 (0) | 2022.10.12 |
---|---|
보안 위험분석 방법과 종류 및 설명 (0) | 2022.10.11 |
네트워크 OSI 7계층, 물리계층, 데이터링크 계층 (0) | 2022.09.02 |
유닉스, 리눅스 패스워드 보안에 대해 알아보자 (0) | 2022.08.30 |
유닉스 Unix, i-node, MAC time (0) | 2022.08.25 |
댓글