https://github.com/somansa-oss/endpointdlp
GitHub - somansa-oss/endpointdlp: Endpoint DLP
Endpoint DLP. Contribute to somansa-oss/endpointdlp development by creating an account on GitHub.
github.com
0. 들어가며
- 소만사 오픈소스 활용
- 우분투 git clone
- git clone 해당 사이트

폴더 구조 확인

전체 .c 파일 확인

examples/filesystem_monitoring/inotify_watch.c
inotify_watch.c : inotify = Linux 커널이 제공하는 파일시스템 감시 API, 특정 디렉토리/파일에 변화가 생기면 커널이 알려줌, DLP에서 "파일이 보사됐다", "삭제됐다."를 감지하는 핵심 매커니즘이다.

1. 코드 흐름(전체 구조)

2. 라인별 설명
- 초기화

inotify 인스턴스 생성, 실패하면 fd<0
- 감시등록

- 이벤트 수신

- 이벤트 판단

- 버퍼 포인터 이동

- DLP관점에서 이게 왜 중요한가
"이벤트를 하나도 빠뜨리면 안 되기 때문!"
이벤트를 하나를 처리한 뒤 다음 이벤트로 포인터를 이동시키는 코드로, DLP관점에서는 파일 대량 복사처럼 이벤트가 한꺼번에 몰릴 때 하나도 빠뜨리지 않기 위해 반드시 필요한 부분이다.
3. 빌드 과정 속 오류



./inotify_watch /home/vboxuser/Desktop/endpointdlp/examples/filesystem_monitoring 실행 후

다른 터미널에서

감지되는 것을 확인할 수 있다.

출력의미 :
| 필드 | 값 | 의미 |
| wd | 1 | watch descript(감시 등록 번호) |
| mask | 256 | IN_CREATE 이벤트(256=0x100) |
| cookie | 0 | 이동 이벤트 쌍 연결용(여기선 0) |
| len | 16 | 파일명 길이 |
| dir | no | 디렉토리 아님, 파일임 |
- mount_monitor.c 분석


4. 차이점
| inotify_watch.c | mount_monitor.c | |
| 감시 대상 | 파일/ 디렉토리 | 마운트 정보 |
| 사용 기술 | Linux inotify API | GLib(gio) |
| 방식 | 직접 read() 루프 | 이벤트 루프(콜백) |
- 개념 : /proc/self/mountinfo

/proc/self/mountinfo = 리눅스가 현재 마운트된 장치 목록을 관리하는 가상파일로 USB 꽂으면 여기에 항목이 추가되고, 뽑으면 사라진다. 이 파일을 감시하면 USB 연결/해제를 감지할 수 있다.
- 코드 흐름

- 콜백 함수

마운트 변화가 생기면 이 함수가 자동으로 호출, 지금은 출력만 하지만, 실제 DLP라면 여기서 USB 차단 로직이 들어가는 부분이다.
- 파일 실행 후

다른 터미널에서 마운트 실행

변화가 감지된다.

- 정리
| 파일 | 감시 대상 | 확인하는 것 |
| inotify_watch.c | 파일 생성/수정/삭제 | touch testfile3.txt -> 이벤트 감지 |
| mnount_monitor.c | 마운트 변화(USB 등) | mount tmpfs -> "MOUNTS CHANGED!" |
- cat fs_monitor.c

- fs_monitor.c
중요한 차이 : inotify vs fanotify
| inotify | fanotify | |
| 역할 | 감지만 가능 | 감지 + 차단 가능 |
| 권한 | 일반 유저 | root 필요 |
| 응답 | 없음 | FAN_ALLOW / FAN_DENY |
| DLP 적합성 | 낮음 | 높음 |
fanotify가 DLP의 핵심인 이유 : 파일 접근을 허용할지 차단할지 결정할 수 있다.
- 전체 흐름

- 핵심 부분별 설명
1. 감시할 이벤트 종류

2. 감시 경로 하드코딩

3. 이벤트 처리 + 차단 로직

4. poll()로 두 가지 동시 대기

- DLP 관점 정리

- 실행

| 필드 | 값 | 의미 |
| path | /usr/share/icons/...svg | 접근된 파일 경로 |
| 65536 | FAN_OPEN_PERM 이벤트 | 파일 열기 시도 감지 |
| pid=2766 | 프로세스 ID | 접근한 프로세스 |
| /usr/libexec/gnome-terminal-server | 프로그램 경 | 터미널이 아이콘 파일 열었음 |
fanotify가 /tmp 마운트 전체를 감시하고 있어서 시스템이 /tmp 관련 파일 접근할 때마다 다 잡힌다.
- PISecSmartDrv.c

- cat main PISecSmartDrv.c
멀티 OS 지원

Linux랑 macOS 둘 다 지원하는 코드로, #ifdef LINUX로 분기해서 OS별로 다른 코드 실행, macOS 쪽은 IOKit, NSString같은 Apple 전용 API를 쓴다.
- 차단 대상 장치 목록 :

이게 DLP가 차단할 수 있는 장치 전체 목록 이다.
- 전체 함수 구조

- 불륨(장치)관리 로직
장치 등록 :

USB 꽂히면 장치 이름, 마운트 경로, 버스 타입을 g_DrcKext.VolCtx에 저장
장치 검색 :

파일 경로 보고 -> 어느 장치(버스타입)에 있는 파일인지 찾기
- 장치 초기화:

USB 뽑히면 장치 목록에서 제거
- 이 세 개가 합쳐지면 :

- 예제 파일들 비교
| 예제 파일 | PISecSmartDrv.c |
| inotify_watch.c 파일 감지 | InstallKauthListener() |
| mount_monitor.c 마운트 감지 | VolCtx_Update/Clear() |
| fs_monitor.c fanotify 차단 | InstallNetworkFilter() |
예제들이 각각 한 가지 기능만 했다면, 이 파일은 전부 합쳐서 하나의 드라이버로 만든다.
- 개선한 UI



'Security > Cloud' 카테고리의 다른 글
| N2SF 국가망 도입으로 보는 클라우드 보안 향후 방향성 제고 (0) | 2026.04.30 |
|---|---|
| DLP(Data Loss Prevention)란? (0) | 2026.02.27 |
