picosnitch — 프로세스별 트래픽 추적
Linux / 모던 CLI 도구 / picosnitch.html
💬 "picosnitch 명령어"
picosnitch는 실행 파일(프로세스) 단위로 네트워크 트래픽을 추적하는 도구입니다. 리눅스 최신 eBPF 기술을 사용해 어떤 실행 파일이 패킷을 보내고 받는지, 얼마의 대역폭을 쓰는지 정확히 매핑합니다.
bandwhich·iftop이 연결과 프로세스 이름을 보여주는 것과 달리, picosnitch는 실행 파일 자체를 해시해 기록합니다. 컨테이너 안에서 도는 앱까지 구분하며, 부모·조부모 프로세스까지 함께 남겨 스크립트나 랩퍼를 통한 우회도 추적합니다.
- 개념: eBPF로 저부하 트래픽 수집 + fanotify로 실행 파일 변경 감지를 동시에 수행합니다.
- 주요 기능: 실행 파일별 대역폭·연결 로그를 남기고, 해시로 실행 파일을 검증합니다.
- 장점: 스크립트·컨테이너·다중 프로세스 환경에서도 실제 발신 주체를 추적합니다.
- 활용: 어떤 프로그램이 백그라운드에서 외부로 데이터를 보내는지 감시할 때 사용합니다.
기본 사용법
picosnitch는 상주 데몬이 패킷을 eBPF로 캡처하고, 실행 파일 단위로 어떤 프로세스가 트래픽을 주고받았는지 기록합니다. 사용 순서는 데몬 시작 → 확인 → 조회(또는 GUI)입니다.
1. 데몬 시작
설치 후 데몬을 시작하면 이후 자동으로 트래픽을 기록합니다.
picosnitch start # 백그라운드 데몬 시작
picosnitch status # 데몬 실행 상태 확인
2. 프로세스별 트래픽 확인
어떤 실행 파일이 얼마를 주고받았는지 조회합니다. gui를 붙이면 시각화 창이 열립니다.
picosnitch query "SELECT name, outgoing_bytes, incoming_bytes FROM process ORDER BY outgoing_bytes DESC LIMIT 10"
picosnitch gui # 웹 GUI로 확인
3. 종료
picosnitch stop으로 데몬을 멈춥니다. 기록된 DB는 남아 있으므로 이후에도 재조회할 수 있습니다.
설치 및 다운로드
picosnitch는 파이썬 패키지로 설치되며 데몬으로 상주합니다.
| 환경 | 명령 |
|---|---|
| PyPI 설치 | sudo pip install picosnitch |
| 설정 파일 초기화 | sudo picosnitch config |
| 데몬 시작 | sudo picosnitch start |
| 상태 확인 | picosnitch status |
| 트래픽 질의 | picosnitch query "executable_name, sum(bytes_recv), sum(bytes_sent) from conns group by executable_name order by sum(bytes_recv) desc limit 10" |
eBPF를 사용하므로 커널 4.15 이상이 필요합니다. 설치 후 picosnitch config로 감시 대상과 로그 위치를 설정합니다.
자주 쓰는 옵션
| 명령 | 설명 |
|---|---|
picosnitch start | 트래픽 수집 데몬을 시작합니다 |
picosnitch stop | 데몬을 중지합니다 |
picosnitch query "<SQL>" | 수집된 로그를 SQL로 질의합니다 |
picosnitch gui | 그래프 UI로 트래픽을 확인합니다 |
필수 명령어 조합 3가지
sudo picosnitch start— 트래픽 수집 데몬 시작picosnitch query "select executable_name, sum(bytes_recv) from conns group by executable_name order by 2 desc limit 5"— 수신 상위 5개 실행 파일 확인picosnitch gui— 수집된 트래픽을 그래프로 시각화
💬 "실제 서버에서 picosnitch로 유출 프로세스를 찾는 예시를 보여줘"
실제 운영 중인 서버에서 자주 만나는 상황을 순서대로 정리했습니다.
1단계 · 데몬 시작 및 확인
설치 후 데몬을 시작하고 상태를 확인합니다.
sudo picosnitch start
picosnitch status
2단계 · 수신 상위 프로세스 확인
가장 많은 데이터를 받는 실행 파일을 확인합니다.
picosnitch query "select executable_name, count(*) as conns, sum(bytes_recv) as recv from conns group by executable_name order by recv desc limit 10"
3단계 · 의심스러운 프로세스 추적
특정 프로세스의 상세 연결을 확인합니다.
picosnitch query "select executable_path, remote_address, remote_port, bytes_sent, bytes_recv from conns where executable_name = 'suspicious_app' order by bytes_sent desc limit 20"
실무에서는 이렇게 씁니다
1. 백그라운드 데이터 유출 탐지
상황 — 어떤 프로그램이 외부로 데이터를 보내는지 확인합니다.
picosnitch query "select executable_name, remote_address, sum(bytes_sent) as sent from conns group by executable_name, remote_address order by sent desc limit 10"
결과 — 실행 파일과 목적지 IP별 송신량이 표시됩니다.
포인트 — 알 수 없는 프로세스가 외부 IP로 대량 송신하면 유출·악성코드 가능성을 확인합니다.
2. 컨테이너 앱 구분
상황 — 컨테이너 안에서 도는 앱의 트래픽을 분리 확인합니다.
picosnitch query "select executable_name, count(*) from conns where executable_path like '/var/lib/docker%' group by executable_name"
결과 — 컨테이너 내부 실행 파일별 연결 수가 표시됩니다.
포인트 — 실행 파일 해시로 동일 이름의 다른 버전까지 구분됩니다.
주의할 점
- eBPF 사용을 위해 커널 4.15 이상이 필요합니다.
- 트래픽 수집에 root 권한이 필요합니다.
- 실행 파일 자체를 해시하므로 shared library·스크립트는 해시 대상에 포함되지 않습니다.
- 실시간 터미널 대시보드보다 로그·질의 중심이라, 즉시 시각 확인은
picosnitch gui를 사용합니다.