Inter-Process Communication

공격자는 IPC(프로세스 간 통신) 메커니즘을 악용해 로컬 코드 실행이나 명령 실행을 할 수 있다.
IPC는 일반적으로 프로세스들이 데이터를 공유하거나, 서로 통신하거나, 실행을 동기화하기 위해 사용된다. 또한, 교착 상태(deadlock)를 방지하기 위해 사용되기도 한다.
공격자는 IPC를 악용해 임의의 코드나 명령을 실행할 수 있다.
IPC 메커니즘은 운영체제에 따라 다르지만, 대부분 프로그래밍 언어나 라이브러리, 네이티브 인터페이스를 통해 접근 가능하다.
예를 들어:
Windows에서는 DDE(Dynamic Data Exchange), COM(Component Object Model) 등이 있다.
Linux에서는 소켓(socket), 파이프(pipe) 등이 있다.
상위 수준의 실행 환경(예: 스크립트 인터프리터 등)도 이러한 IPC 메커니즘을 내부적으로 활용할 수 있다.
또한, DCOM (Distributed Component Object Model) 같은 원격 서비스를 이용해 원격 IPC 실행을 수행할 수도 있다.
윈도우
① DDE (Dynamic Data Exchange)
무엇인가?
윈도우의 오래된 프로세스 간 통신(IPC) 기술.
1980~1990년대에 많이 쓰였고, 지금은 거의 레거시 기술.
주로 엑셀, 워드, 아웃룩 같은 오피스 프로그램들이 서로 데이터를 주고받을 때 사용했음.
어떻게 동작하는가?
한 프로세스가 다른 프로세스에게 "데이터를 업데이트 해줘"라고 요청함.
예를 들어:
엑셀에서 다른 워드 문서의 데이터를 계속 불러오는 작업.
실시간 주식 가격, 환율 등이 DDE로 연동 가능했음.
공격자는 어떻게 악용하는가?
정상적인 통신이기 때문에 사용자가 쉽게 속음.
대표적 사례:
엑셀 파일 안에 DDE 코드 삽입 → 사용자 더블클릭 → 명령 실행
=cmd|'/C calc.exe'!A0
← 이런 DDE 필드 삽입 가능
주로 피싱 이메일로 엑셀이나 워드 문서를 보내서 악용.
이 방식은 매크로 보안 설정을 우회할 수 있었던 시절도 있음.
지금도 위험한가?
- 마이크로소프트가 많이 방어했지만, 레거시 시스템, 일부 설정 미흡한 환경에선 여전히 사용 가능.
② COM (Component Object Model)
무엇인가?
마이크로소프트가 만든 객체 기반 컴포넌트 시스템.
모듈화된 바이너리 코드들(DLL, EXE)끼리 인터페이스를 통해 통신할 수 있게 만들어줌.
윈도우 운영체제 전체가 거의 이걸로 작동함.
인터페이스 기반으로 메서드 호출 → 일종의 "API 중간다리"
어떻게 동작하는가?
EXE나 DLL 안에 COM 객체 존재 → 다른 프로그램이 이 객체의 메서드를 호출함.
예:
Word, Excel, Internet Explorer, Windows Shell, Internet Explorer 전부 COM 기반.
C++, C#, VB, 파워셸 등에서 COM 호출 가능.
공격자는 어떻게 악용하는가?
COM 객체를 조작하거나 잘못된 COM 권한 설정을 이용:
임의 코드 실행 (code execution)
권한 상승 (privilege escalation)
지속성 확보 (persistence)
대표적 공격기법:
COM Hijacking (COM 레지스트리 경로 조작 → 악성 DLL 호출)
DCOM을 통한 원격 코드 실행 (원격 서비스 활용)
LOLBAS(정상파일 악용): MS Office 앱의 COM 인터페이스 악용
COM의 특징:
장점 | 단점 |
운영체제 전역에서 사용 가능 | 너무 오래되고 복잡함 |
다양한 언어로 접근 가능 | 취약점이 자주 발생 |
IPC, 권한 상승, 지속성 모두 가능 | 레지스트리 의존 (Registry-based) |
리눅스
① 파이프 (Pipe)
무엇인가?
같은 컴퓨터 안에서 프로세스끼리 데이터를 주고받을 때 사용하는 아주 간단한 통신 방법.
마치 "호스"처럼 한쪽에서 데이터를 보내면 다른 쪽에서 바로 읽는다.
주로 짧은, 빠른, 단순한 통신에 사용됨.
종류
종류 | 설명 |
익명 파이프 (Anonymous Pipe) | 부모-자식 프로세스 간 통신에 많이 사용됨. 파일 핸들 기반. |
명명된 파이프 (Named Pipe) | 이름이 있어서 서로 전혀 다른 프로세스끼리도 통신 가능. 네트워크 넘어서도 가능 (윈도우에서 SMB 프로토콜 통해) |
어떻게 동작하는가?
익명 파이프:
pipe()
→ 부모 프로세스가 파이프 만들고 → 자식 프로세스가 읽거나 씀.
명명된 파이프:
mkfifo()
(리눅스)CreateNamedPipe()
(윈도우)
공격자는 어떻게 악용하는가?
권한 상승, 프로세스 간 후킹, 악성코드 통신에 활용
특히 윈도우 Named Pipe는 C2 채널로 많이 사용됨:
파워셸 악성코드끼리 내부 통신
Lateral Movement 할 때 내부 시스템끼리 몰래 통신
SMB 취약점 공격에도 등장 (예: EternalBlue)
② 소켓 (Socket)
무엇인가?
네트워크 통신을 위해 만들어진 통신 방식.
프로세스끼리 같은 컴퓨터 안에서도, 혹은 다른 컴퓨터 사이에서도 통신 가능.
인터넷 통신이 모두 이걸 기반으로 돌아감.
종류
종류 | 설명 |
TCP 소켓 | 연결지향형 (신뢰성 보장, 스트림 기반) |
UDP 소켓 | 비연결지향형 (빠르지만 신뢰성 없음) |
도메인 소켓 (Unix Domain Socket) | 네트워크 대신, 같은 시스템 안에서만 통신 (파이프 비슷) |
어떻게 동작하는가?
서버:
socket() -> bind() -> listen() -> accept()
클라이언트:
socket() -> connect()
데이터를 주고받음:
send() / recv()
공격자는 어떻게 악용하는가?
가장 많이 쓰임!! C2 서버 통신의 핵심.
리버스 셸, 바인드 셸 다 소켓으로 만듦.
익스플로잇 페이로드로 쉘코드 만들 때 소켓으로 통신 채널 생성.
포트 스캔, 포트 포워딩, 터널링, 프록시… 다 소켓 기반.
쉽게 비교
파이프 | 소켓 | |
범위 | 보통 같은 시스템 내 통신 | 시스템 간 통신 (네트워크 포함) |
사용 용도 | 단순하고 빠른 데이터 전달 | 인터넷, 원격, 복잡한 통신 |
악용 용도 | 권한 상승, 로컬 프로세스 통신 | 원격 C2, 리버스 쉘, 터널링, 후킹 |
Subscribe to my newsletter
Read articles from 박서경 directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
