Submissions 서비스에 사용되는 587번 포트는 인증 없이 메일을 전송할 수 있게 하는 SMTP로 인해 발생하는 문제를 해결하고자 사용되는 포트이다. 인증이 필요 없다는 특징을 악용하여 스팸 메일이 늘어나자 이를 막기 위한 정책인 OP25B가 사용되었는데, 이러한 정책으로 인해 오히려 정상적인 사용자의 가용성이 침해되는 경우가 발생하였다. 그리하여 이를 해결하기 위해 587번 포트를 사용해 SMTP를 사용하면서도 인증 과정을 거치도록 하였고 이것으로 보안성을 높이면서 가용성 문제를 해결할 수 있었다. 이러한 이유로 submission 포트 587번은 근본적으로는 SMTP 메일 서비스와 같으며 따라서 SMTP와 비슷한 방법으로 서비스 식별이 가능하다.

메일 서버 구축 방법은 ‘서비스 식별: SMTPS (465)’를 참고하여 진행할 수 있다. 

테스트를 위해 사용한 클라이언트 프로그램은 2.1.26 SMTPS에서 사용한 것과 같은 python의 ‘smtplib’ 라이브러리를 사용하였다. 587번 포트를 이용하여서도 SMTP 프로토콜을 이용해 통신할 수 있다. 테스트 시 사용한 코드는 아래와 같다. SMTP 메소드는 주어진 host, port와 SMTP 연결을 맺기 위한 요청을 보낸다. 따라서 587번 포트에 SMTP 서버가 서비스 중이 아닐 경우 연결을 맺는데 실패하여 에러가 발생한다. 이를 이용하여 SMTP 서버의 서비스 여부를 판단하였다.

import smtplib

def test_Submissions(mail_server):
	try:
    	smtp = smtplib.SMTP(host=mail_server, port=587)
        smtp.quit()
        print('on success')
    except:
    	print('no service')

if __name__ == "__main__":
	server_ip = 'ip address'
    test_Submissions(server_ip)

 

이 과정을 네트워크 패킷 레벨에서 확인하면 다음과 같다.

[그림 1]은 SMTP 서버가 동작 중일 경우에 해당하며, 정상적으로 TCP 3-way handshake를 맺은 후 SMTP 연결을 위한 메시지를 교환하는 것을 확인할 수 있다. [그림 2]는 SMTP 서버가 동작 중이지 않을 경우에 해당하며, TCP SYN 패킷에 대한 응답으로 TCP RST 패킷이 반환되는 것을 볼 수 있다.

그림 1
그림 2

 

'Penetration testing' 카테고리의 다른 글

서비스 식별: PostgreSQL (5432)  (0) 2023.09.01
서비스 식별: SMTPS (465)  (0) 2023.09.01
서비스 식별: HTTPS (443)  (0) 2023.09.01
서비스 식별: LDAP (389)  (0) 2023.09.01

+ Recent posts