Inter-Process Communication

박서경박서경
4 min read

공격자는 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, 리버스 쉘, 터널링, 후킹
0
Subscribe to my newsletter

Read articles from 박서경 directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

박서경
박서경