ident 데몬(oidentd) 활용한 ident 서비스 구축하기

by ANTIBIOTICS posted Jul 05, 2023
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

 

1. Identification (ident) 프로토콜이란?

 

  Identification (ident) 프로토콜은 RFC1413에서 정의되었습니다.  ident의 목적은 특정 TCP 커넥션의 포트 번호 쌍을 사용해 클라이언트 시스템에서 해당 커넥션을 초기화한 사용자를 확인하는 것입니다. 일반적으로 ident 서비스는 TCP 포트 113번을 사용합니다.

 

  ident 질의 메시지는 <port-on-server> , <port-on-client> 형식으로 구성되며,  응답 메시지는 <port-on-server> , <port-on-client> : <resp-type> : <add-info> 형식으로 구성됩니다. <port-on-server>및 <port-on-client> 필드는 각각 ident 요청을 보낼 클라이언트의 포트 번호와 ident 요청을 보내는 서버의 포트 번호입니다. 포트 번호는 10진수로 표기되며 질의와 응답 메시지가 같은 값을 갖습니다. <rest-type> 필드에는 응답 유형이 표기되며 응답 유형으로는 USERID또는 ERROR가 들어갈 수 있습니다. <add-info>는 응답 유형별 추가 정보를 포함하는 필드로 USERID인 운영체제 정보와 사용자 정보가 포함되며, ERROR인 경우 오류 타입이 포함됩니다. (더 자세한 내용은 프로토콜 명세를 참고)

 

트랜잭션 예시 :

 

    질의 - 6191, 23

    응답 - 6193, 23 : USERID : UNIX : stjohns 

              6195, 23 : ERROR : NO-USER

 

  ident 데몬을 사용하는 경우 공격자에게 운영체제나 사용자 정보와 같은 중요한 정보가 노출될 수 있습니다. 또한 이름과 달리 ident는 실제 인증/인가와는 무관하며 ident를 인증이나 접근 제어 용도로 사용해서는 안됩니다. 오류 또는 공격자에 의해 변조된 ident 응답이 반환될 가능성이 있으며 ident는 프로토콜 설계상 이러한 잘못된 응답을 검증할 방법이 없습니다. 이처럼 ident는 보안 측면에서 굉장히 취약한 프로토콜이므로  상호 신뢰할 수 있는 시스템들 사이에서 운용되는 것이 좋습니다.

 

 

2. oidentd 활용한 ident 서비스 구축 및 질의 테스트

 

2010년대 전후의 자료를 찾아보면 당시에는 모든 운영체제에 ident 서버가 기본적으로 내장되어 있었던것 같지만 2023년 현재는 별도의 패키지를 설치해야 합니다.

 

oidentd는 리눅스에서 사용할 수 있는 ident 데몬으로 우분투의 패키지 관리 도구를 사용해 설치할 수 있습니다.

 

~$ sudo apt update

~$ sudo apt install oidentd

 

ident 데몬을 설치합니다.

 

~$ sudo service oidentd start

 

ident 데몬을 실행합니다.

 

ident-server-status.png

~$ sudo service oidentd status

 

ident 데몬이 정상 실행중인지 확인합니다.

 

ident-server-listen.png

~$ sudo netstat -atp | grep oidentd

 

ident 데몬이 TCP 113번 포트를 사용하여 리스닝하고 있는지 확인합니다.

 

ident-server-firewall.png

~$ sudo firewall-cmd --permanent --zone=public --add-port=113/tcp

~$ sudo firewall-cmd --reload

~$ sudo firewall-cmd --list-all

 

이제 ident 데몬이 외부로부터의 ident 질의에 응답할 수 있도록 방화벽에서 TCP 포트 113번의 인바운드 트래픽을 허용합니다.

저는 firewalld를 사용하고 있지만, 방화벽 관리 프로그램으로 ufw를 사용하는 경우 "ufw allow 113/tcp"를 입력해 포트를 개방할 수 있습니다.

 

ident-test-code.png

 

HTTP/1.0 서버를 구현하는 토이프로젝트인 simserver에 ident 요청을 보내는 간단한 코드를 추가해 보았습니다. 위 코드는 HTTP 서버가 각각의 HTTP 요청을 보낸 클라이언트에게 ident 요청을 보내 클라이언트 정보를 확인합니다.

 

ident-test-result.png

 

HTTP 커넥션에 사용된 포트 번호 쌍을 ident 요청으로 전송했고, 클라이언트로부터 운영체제 정보와 HTTP 요청을 보낸 사용자 정보를 성공적으로 수신한 모습입니다.

 

 

3. 참고자료

 

RFC 1413: Identification Protocol

janikrabe/oidentd: Flexible, RFC 1413 compliant Ident daemon with NAT support