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