Skip to content

junyeong0619/Renux

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

99 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Renux: eBPF 기반 μ‹€μ‹œκ°„ λ¦¬λˆ…μŠ€ ν–‰μœ„ λͺ¨λ‹ˆν„°λ§ μ‹œμŠ€ν…œ

RenuxλŠ” λ‹€μˆ˜μ˜ λ¦¬λˆ…μŠ€ ν˜ΈμŠ€νŠΈμ—μ„œ λ°œμƒν•˜λŠ” μ‹œμŠ€ν…œ ν–‰μœ„λ₯Ό 컀널 μˆ˜μ€€μ—μ„œ μ‹€μ‹œκ°„μœΌλ‘œ μΊ‘μ²˜ν•˜κ³ , 쀑앙 μ„œλ²„μ—μ„œ 톡합 λΆ„μ„Β·μ‹œκ°ν™”ν•˜λŠ” λΆ„μ‚° λͺ¨λ‹ˆν„°λ§ λ„κ΅¬μž…λ‹ˆλ‹€. 각 ν˜ΈμŠ€νŠΈμ— μƒμ£Όν•˜λŠ” μ—μ΄μ „νŠΈ(renux)λŠ” eBPF둜 μ‹œμŠ€ν…œ 호좜 μ§„μž…μ μ„ 직접 ν›„ν‚Ήν•˜μ—¬ 탐지 지연을 0ms μˆ˜μ€€μœΌλ‘œ μ€„μ˜€μœΌλ©°, μ‚¬μš©μž μΈ‘ μš°νšŒκ°€ 사싀상 λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€. μˆ˜μ§‘λœ ν–‰μœ„λŠ” TLS μœ„μ—μ„œ 쀑앙 λ§ˆμŠ€ν„°(renux_master)둜 ν‘Έμ‹œλ˜μ–΄, 이벀트 κ°€μ€‘μΉ˜ λˆ„μ Β·μœ„ν—˜λ„ μ§€μˆ˜ κ°μ‡ Β·μ•ŒλžŒ λ²„μŠ€νŠΈ 감지λ₯Ό 톡해 μ •λŸ‰μ  μœ„ν˜‘ μ‹ ν˜Έλ‘œ κ°€κ³΅λ©λ‹ˆλ‹€.

μ €μž₯μ†Œμ—λŠ” μž‘λ…„μ— κ°œλ°œν•œ V1 원격 관리 도ꡬ(server_e + client_e)도 κ·ΈλŒ€λ‘œ λ³΄μ‘΄λ˜μ–΄ 있으며, λ™μΌν•œ λ³΄μ•ˆ μœ ν‹Έλ¦¬ν‹° λͺ¨λ“ˆ(PBKDF2-SHA256 μ†”νŠΈ ν•΄μ‹±, OpenSSL TLS μ»¨ν…μŠ€νŠΈ)을 κ³΅μœ ν•©λ‹ˆλ‹€.


πŸ“‹ μ£Όμš” κΈ°λŠ₯ (V3)

  • eBPF 기반 컀널 μˆ˜μ€€ 캑처: execve, tcp_connect, openat, sched_process_fork λ„€ ν›„ν‚Ή ν¬μΈνŠΈμ— BPF ν”„λ‘œκ·Έλž¨μ„ λΆ€μ°©ν•˜μ—¬ μ‰˜ μ‹€ν–‰Β·μ™ΈλΆ€ TCP 접속·민감 경둜 μ“°κΈ°Β·μ›Ήμ…Έ forkλ₯Ό 0ms μ§€μ—°μœΌλ‘œ νƒμ§€ν•©λ‹ˆλ‹€. .bashrc ν›…μ΄λ‚˜ inotify와 달리 우회 λΆˆκ°€ν•©λ‹ˆλ‹€.
  • 닀쀑 μ—μ΄μ „νŠΈ β†’ 단일 λ§ˆμŠ€ν„° (N:1): 각 호슀트의 renux μ—μ΄μ „νŠΈκ°€ 9000번 포트의 λ§ˆμŠ€ν„°λ‘œ TLS ν‘Έμ‹œ. λ§ˆμŠ€ν„°λŠ” μ—μ΄μ „νŠΈλ³„ std::thread둜 독립 μ²˜λ¦¬ν•©λ‹ˆλ‹€.
  • μœ„ν—˜λ„ 평가: 이벀트 μ’…λ₯˜λ³„ κ°€μ€‘μΉ˜(REVERSE_SHELL +30 / WEBSHELL +25 / ZONE_VIOLATION +15 / FILE +2 / EXEC +1)λ₯Ό λˆ„μ , 0–100 μ μˆ˜μ— 따라 LOW/MEDIUM/HIGH/CRITICAL둜 λΆ„λ₯˜ν•©λ‹ˆλ‹€. 60μ΄ˆλ§ˆλ‹€ 0.7λ°° μ§€μˆ˜ 감쇠.
  • μ•ŒλžŒ λ²„μŠ€νŠΈ 감지: 30초 μŠ¬λΌμ΄λ”© μœˆλ„μš° μ•ˆμ— ALERT 3건 이상 λ°œμƒ μ‹œ μžλ™ CRITICAL 격상, μœˆλ„μš° 만료 μ‹œ μžλ™ ν•΄μ œ.
  • Safe-zone λΈ”λž™λ¦¬μŠ€νŠΈ λ£°: /etc/renux.conf에 DANGER_PATH / DANGER_CMD / DANGER_USER둜 μ‚¬μ΄νŠΈλ³„ μ •μ±… μ •μ˜. 맀치 μ‹œ ZONE_VIOLATION μ•ŒλžŒ λ°œμƒ + μœ„ν—˜λ„ +15.
  • 운영자 TUI: ncurses λΆ„ν•  ν™”λ©΄. tm λͺ…λ ΉμœΌλ‘œ μ΅œλŒ€ 4개 μ—μ΄μ „νŠΈμ˜ μ‹€μ‹œκ°„ 둜그λ₯Ό λ™μ‹œ λͺ¨λ‹ˆν„°λ§, [g] ν‚€λ‘œ 이벀트 νƒ€μž…λ³„ 이진 슀파크라인 κ·Έλž˜ν”„ λͺ¨λ“œ μ „ν™˜.
  • Activity Replay: replay <ip|tag> β€” EXEC와 후속 FILE 이벀트λ₯Ό κ·Έλ£Ήν™”ν•˜μ—¬ μ‚¬λžŒμ΄ 읽기 μ‰¬μš΄ 행동 νƒ€μž„λΌμΈμœΌλ‘œ μž¬κ΅¬μ„±. 30초 이상 곡백은 --- N s gap --- κ΅¬λΆ„μ„ μœΌλ‘œ μ‹œκ°ν™”.
  • νƒœκ·Έ μ‹œμŠ€ν…œ: IP에 μ‚¬λžŒμ΄ κΈ°μ–΅ν•˜κΈ° μ‰¬μš΄ 별칭 λΆ€μ—¬ (tag 10.0.0.11 web-01). λͺ¨λ“  λͺ…λ ΉΒ·UI 좜λ ₯μ—μ„œ μ–‘λ°©ν–₯ λ³€ν™˜.
  • Geolocation: REVERSE_SHELL μ•ŒλžŒμ˜ 원격 IPλ₯Ό ip-api.com에 비동기 μ‘°νšŒν•˜μ—¬ λ„μ‹œΒ·κ΅­κ°€ 정보λ₯Ό UI에 ν‘œμ‹œ. 사섀 λŒ€μ—­μ€ μžλ™ μŠ€ν‚΅.
  • TLS + μ˜€ν”„λΌμΈ 버퍼링: λͺ¨λ“  μ—μ΄μ „νŠΈβ†”λ§ˆμŠ€ν„° 톡신은 OpenSSL TLS. λ§ˆμŠ€ν„° 연결이 λŠκ²¨λ„ μ—μ΄μ „νŠΈκ°€ μ΅œλŒ€ 1000개의 둜그λ₯Ό 큐에 보관, μž¬μ—°κ²° μ‹œ μžλ™ flush.
  • PBKDF2-SHA256 μ†”νŠΈ ν•΄μ‹±: 16-byte μ†”νŠΈ + 10,000회 반볡. djb2 ν•΄μ‹œλŠ” V1 ν•˜μœ„ ν˜Έν™˜μš©μœΌλ‘œλ§Œ μœ μ§€.

πŸ—οΈ μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                          관리 λŒ€μƒ 호슀트                          β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
β”‚   β”‚  Kernel Space (Linux β‰₯ 5.8)                             β”‚    β”‚
β”‚   β”‚   β€’ tp/sys_enter_execve   ─┐                            β”‚    β”‚
β”‚   β”‚   β€’ kprobe/tcp_connect    ─┼─►  BPF Ring Buffer (256KB) β”‚    β”‚
β”‚   β”‚   β€’ tp/sys_enter_openat   ──                            β”‚    β”‚
β”‚   β”‚   β€’ tp/sched_process_fork β”€β”˜                            β”‚    β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
β”‚                                β–Ό                                  β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚
β”‚   β”‚  User Space β€” renux (monitor.cpp)                      β”‚     β”‚
β”‚   β”‚   ring_buffer__poll β†’ handle_event β†’ check_zone        β”‚     β”‚
β”‚   β”‚   β†’ write_agent_log β†’ /var/log/renux.log               β”‚     β”‚
β”‚   β”‚   β†’ send_log_to_master() (TLS, offline queue)          β”‚     β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                 β”‚ LOG|<ip>|<msg>\n  (TLS, port 9000)
                                 β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  renux_master (쀑앙 μ„œλ²„)                                          β”‚
β”‚   per-agent std::thread β†’ log_message():                          β”‚
β”‚     β€’ ALERT λΆ„λ₯˜ + μœ„ν—˜λ„ κ°€μ€‘μΉ˜ λˆ„μ                               β”‚
β”‚     β€’ Alert Burst 감지 (30s/3건 β†’ CRITICAL)                       β”‚
β”‚     β€’ risk_decay_loop (60sλ§ˆλ‹€ Γ—0.7)                              β”‚
β”‚   central_renux.log + agents/{ip}.log                             β”‚
β”‚   ncurses TUI: list / tm / stats / replay / trace-log / ...      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ”¬ eBPF ν›„ν‚Ή 포인트

ν›„ν‚Ή 탐지 μ‹œλ‚˜λ¦¬μ˜€ κ°€μ€‘μΉ˜ μ•ŒλžŒ ν‚€μ›Œλ“œ
tp/syscalls/sys_enter_execve μ‰˜/μΈν„°ν”„λ¦¬ν„°μ˜ execve (bash, sh, nc, python3, …) + argv[1..4] 캑처 +1 EXEC
kprobe/tcp_connect μ‰˜ ν”„λ‘œμ„ΈμŠ€κ°€ μ™ΈλΆ€ IP둜 connect() μ‹œλ„ (λ¦¬λ²„μŠ€ μ…Έ) +30 ALERT: REVERSE_SHELL DETECTED
tp/syscalls/sys_enter_openat O_WRONLY/O_RDWR/O_CREAT둜 /etc, /root, /home/, /tmp/ μ“°κΈ° μ ‘κ·Ό +2 FILE ACCESS
tp/sched/sched_process_fork μ›Ήμ„œλ²„(apache2, nginx, php-fpm, …) β†’ μ‰˜ fork (μ›Ήμ…Έ) +25 ALERT: WEBSHELL SUSPECTED
(μ‚¬μš©μž 곡간) DANGER_PATH/CMD/USER λ£° 맀치 +15 ALERT: ZONE_VIOLATION rule=…

BPF verifier 톡과λ₯Ό μœ„ν•΄ argvλŠ” 30λ°”μ΄νŠΈ κ³ μ • 슬둯 4개 둜 λΆ„ν•  캑처, 경둜 κ²€μ‚¬λŠ” 256λ°”μ΄νŠΈ 루프 λŒ€μ‹  컴파일 νƒ€μž„ λΆ„κΈ°λ‘œ κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€.


πŸš€ λΉŒλ“œ 및 μ‹€ν–‰

사전 μš”κ΅¬ 사항

  • μ—μ΄μ „νŠΈ (Linux 호슀트): 컀널 5.8+, clang, libbpf-dev, bpftool, libssl-dev, libncurses-dev, CAP_BPF (보톡 root)
  • λ§ˆμŠ€ν„° (λͺ¨λ“  ν”Œλž«νΌ): g++ (C++17), libssl-dev, libncurses-dev
  • V1 (선택): gcc, libncurses-dev, pthreads

λΉŒλ“œ

git clone https://github.com/junyeong0619/Renux.git
cd Renux

# 전체 λΉŒλ“œ (V1 + V3)
make

# κ°œλ³„ νƒ€κ²Ÿ
make server_e        # V1 μ„œλ²„
make client_e        # V1 ν΄λΌμ΄μ–ΈνŠΈ
make renux           # V3 μ—μ΄μ „νŠΈ (eBPF, Linux μ „μš©)
make renux_master    # V3 λ§ˆμŠ€ν„°

make renuxλŠ” λ‚΄λΆ€μ μœΌλ‘œ λ‹€μŒμ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

clang -O2 -g -target bpf -D__BPF_PROGRAM__ -D__TARGET_ARCH_x86_64 \
      -I monitoring/ -c monitoring/renux.bpf.c -o renux.bpf.o
bpftool gen skeleton renux.bpf.o name renux > renux.skel.h
g++ -std=c++17 -O2 monitoring/monitor.cpp utils/ssl_utils.c \
    -lbpf -lssl -lcrypto -o renux

TLS μΈμ¦μ„œ (V3 ν•„μˆ˜)

λ§ˆμŠ€ν„°λŠ” /etc/renux/master.crt, /etc/renux/master.keyλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. 자체 μ„œλͺ… μΈμ¦μ„œλ‘œ μΆ©λΆ„ν•©λ‹ˆλ‹€.

sudo mkdir -p /etc/renux
sudo openssl req -x509 -newkey rsa:4096 -nodes -days 3650 \
    -keyout /etc/renux/master.key -out /etc/renux/master.crt \
    -subj "/CN=renux-master"
sudo chmod 600 /etc/renux/master.key

μ—μ΄μ „νŠΈ μ„€μ •

sudo ./install.sh
# λ˜λŠ” μˆ˜λ™:
sudo tee /etc/renux.conf <<EOF
MASTER_IP=192.168.1.10
MASTER_PORT=9000

# Safe-zone (λΈ”λž™λ¦¬μŠ€νŠΈ) λ£° β€” 선택
# DANGER_PATH=/etc
# DANGER_PATH=/root/.ssh
# DANGER_CMD=/usr/bin/passwd
# DANGER_USER=root
EOF

μ‹€ν–‰

# 1. λ§ˆμŠ€ν„° (쀑앙 호슀트, 9000번 포트 listen)
./renux_master

# 2. μ—μ΄μ „νŠΈ (관리 λŒ€μƒ ν˜ΈμŠ€νŠΈλ§ˆλ‹€, root κΆŒν•œ ν•„μš”)
sudo ./renux

# 3. (선택) V1 원격 관리 도ꡬ
./server_e               # 별도 ν˜ΈμŠ€νŠΈμ—μ„œ, 8080 포트
./client_e 127.0.0.1 8080

systemd μ„œλΉ„μŠ€λ‘œ λ“±λ‘ν•˜λ €λ©΄ ./setup.shλ₯Ό μ‹€ν–‰ν•˜μ„Έμš”.


πŸŽ›οΈ λ§ˆμŠ€ν„° 운영자 λͺ…λ Ήμ–΄

λ§ˆμŠ€ν„°λ₯Ό λ„μš°λ©΄ ncurses λΆ„ν•  TUIκ°€ λœΉλ‹ˆλ‹€. ν•˜λ‹¨ μž…λ ₯μ°½μ—μ„œ λͺ…λ Ήμ–΄λ₯Ό μž…λ ₯ν•˜λ©°, νƒ­ μ™„μ„±κ³Ό ↑/↓ νžˆμŠ€ν† λ¦¬λ₯Ό μ§€μ›ν•©λ‹ˆλ‹€.

λͺ…λ Ήμ–΄ 인수 κΈ°λŠ₯
list β€” μ—°κ²°λœ μ—μ΄μ „νŠΈ λͺ©λ‘ + μœ„ν—˜λ„ + λ§ˆμ§€λ§‰ μˆ˜μ‹  μ‹œκ°
tm β€” Trace Monitor β€” μ΅œλŒ€ 4개 μ—μ΄μ „νŠΈμ˜ λΆ„ν•  λŒ€μ‹œλ³΄λ“œ ([g] κ·Έλž˜ν”„, [c] clear, [q] quit)
stats [ip|tag] 이벀트 μ’…λ₯˜λ³„ 카운트λ₯Ό ASCII λ°” 차트둜 ν‘œμ‹œ
replay <ip|tag> EXEC + FILE을 κ·Έλ£Ήν™”ν•œ 행동 νƒ€μž„λΌμΈ (μ΅œμ‹ μ΄ μœ„, 30초 이상 곡백은 gap ν‘œμ‹œ)
trace-log <ip|tag> μ—μ΄μ „νŠΈμ˜ 쀑앙 둜그 전체λ₯Ό ν’€μŠ€ν¬λ¦° μ˜€λ²„λ ˆμ΄λ‘œ ν‘œμ‹œ
trace-tr <H:H> μ‹œκ°„λŒ€ ALERT ν•„ν„° (예: trace-tr 1:13)
tag / untag / tags [<ip> <name>] IP ↔ 별칭 관리 (인수 μ—†μœΌλ©΄ μΈν„°λž™ν‹°λΈŒ UI)
delete-log <ip|tag|all> κΈ°κ°„ 선택 (1h/6h/24h/7d/30d/all) ν›„ 둜그 정리. yes μž…λ ₯ 확인 ν•„μˆ˜
help β€” 도움말
exit β€” λ§ˆμŠ€ν„° μ’…λ£Œ

πŸ“ ν”„λ‘œμ νŠΈ ꡬ쑰

.
β”œβ”€β”€ monitoring/              # V3 λͺ¨λ‹ˆν„°λ§ (eBPF + λ§ˆμŠ€ν„°)
β”‚   β”œβ”€β”€ renux.bpf.c          #   eBPF 컀널 ν”„λ‘œκ·Έλž¨ (4개 ν›„ν‚Ή 포인트)
β”‚   β”œβ”€β”€ renux_event.h        #   컀널-μ‚¬μš©μž 곡유 헀더
β”‚   β”œβ”€β”€ monitor.cpp          #   μ—μ΄μ „νŠΈ (libbpf, TLS forwarder)
β”‚   └── master.cpp           #   λ§ˆμŠ€ν„° (TLS accept, risk score, ncurses TUI)
β”‚
β”œβ”€β”€ server/                  # V1 관리 μ„œλ²„ (legacy)
β”‚   β”œβ”€β”€ server.c             #   kqueue/epoll 이벀트 루프, 인증
β”‚   β”œβ”€β”€ service.c            #   λͺ…λ Ή 처리 (getu, get_proc, set_quota, …)
β”‚   └── tui.c, tui.h
β”‚
β”œβ”€β”€ client/                  # V1 관리 ν΄λΌμ΄μ–ΈνŠΈ (legacy)
β”‚   β”œβ”€β”€ client.c             #   μ„œλ²„ 접속, λ©€ν‹°μŠ€λ ˆλ“œ UI
β”‚   └── tui.c, tui.h
β”‚
β”œβ”€β”€ utils/                   # 곡유 λͺ¨λ“ˆ
β”‚   β”œβ”€β”€ ssl_utils.c          #   PBKDF2-SHA256 ν•΄μ‹±, TLS μ»¨ν…μŠ€νŠΈ, djb2 (legacy)
β”‚   β”œβ”€β”€ log.c                #   파일 λ‘œκΉ…
β”‚   └── exec_utils.c
β”‚
β”œβ”€β”€ agents/                  # λ§ˆμŠ€ν„°μ˜ μ—μ΄μ „νŠΈλ³„ 둜그 (λŸ°νƒ€μž„ 생성)
β”œβ”€β”€ docs/                    # 섀계 λ¬Έμ„œ
β”œβ”€β”€ install.sh / setup.sh    # μžλ™ μ„€μΉ˜ + systemd 등둝
β”œβ”€β”€ Makefile / CMakeLists.txt
└── README.md

πŸ› οΈ μ£Όμš” μ‚¬μš© 기술

1. eBPF (Extended Berkeley Packet Filter)

λ¦¬λˆ…μŠ€ 컀널에 μ•ˆμ „ν•˜κ²Œ μ‚¬μš©μž μ½”λ“œλ₯Ό μ£Όμž…ν•˜λŠ” 기술. clang -target bpf둜 μ»΄νŒŒμΌν•˜μ—¬ libbpf의 skeleton μΈν„°νŽ˜μ΄μŠ€λ‘œ λ‘œλ“œν•©λ‹ˆλ‹€.

  • 링 버퍼 (BPF_MAP_TYPE_RINGBUF): 256KB 크기, 컀널 β†’ μ‚¬μš©μž 곡간 단방ν–₯ 전달
  • Verifier μ œμ•½ νšŒν”Ό: argvλŠ” 30λ°”μ΄νŠΈ κ³ μ • 슬둯, 경둜 κ²€μ‚¬λŠ” 컴파일 νƒ€μž„ λΆ„κΈ° (256λ°”μ΄νŠΈ 루프 λŒ€μ‹ )

2. C++17 (λͺ¨λ‹ˆν„°λ§ λͺ¨λ“ˆ)

  • std::thread, std::mutex: μ—μ΄μ „νŠΈλ³„ ν•Έλ“€λŸ¬, risk decay, UI, geolocation 비동기 μŠ€λ ˆλ“œμ˜ 동기화
  • std::map<std::string, AgentData>: μ—μ΄μ „νŠΈλ³„ μƒνƒœ μ €μž₯ (둜그 deque, μœ„ν—˜λ„, 이벀트 μΉ΄μš΄ν„°, μ•ŒλžŒ νƒ€μž„μŠ€νƒ¬ν”„)
  • std::deque<std::time_t>: μŠ¬λΌμ΄λ”© μœˆλ„μš° 기반 μ•ŒλžŒ λ²„μŠ€νŠΈΒ·κ·Έλž˜ν”„μš© 이벀트 νƒ€μž„λΌμΈ

3. OpenSSL (TLS + PBKDF2)

  • TLS μ»¨ν…μŠ€νŠΈ: create_server_ssl_ctx() / create_client_ssl_ctx()둜 λ§ˆμŠ€ν„°Β·μ—μ΄μ „νŠΈ μ–‘μͺ½ ꡬ성
  • PBKDF2-SHA256: hash_password_salted() β€” 16-byte 랜덀 μ†”νŠΈ + 10,000회 반볡. μ €μž₯ 포맷 <32-hex-salt>:<64-hex-hash>

4. Ncurses (λ§ˆμŠ€ν„° TUI)

  • λΆ„ν•  ν™”λ©΄: 상단 둜그 슀트림 + ν•˜λ‹¨ λͺ…λ Ή μž…λ ₯
  • Trace Monitor: 1Β·2Β·3Β·4 νŒ¨λ„λ‘œ 동적 λ ˆμ΄μ•„μ›ƒ, ALERT μƒνƒœμ— λ”°λ₯Έ ν…Œλ‘λ¦¬ 색상 λ³€ν™”
  • 이진 슀파크라인: κ·Έλž˜ν”„ λͺ¨λ“œμ—μ„œ 이벀트 μ’…λ₯˜λ³„λ‘œ | / 곡백 ν‘œμ‹œ

5. 컴파일러 λ³΄μ•ˆ ν•˜λ“œλ‹ (Makefile)

-Wall -O2 -fstack-protector-all -D_FORTIFY_SOURCE=2
-Wformat -Wformat-security
-Wl,-z,relro,-z,now    (Linux μ „μš©)

🧱 Legacy: V1 원격 관리 도ꡬ (server_e + client_e)

μž‘λ…„μ— κ°œλ°œν•œ 1:N 관리 채널이 κ·ΈλŒ€λ‘œ λ³΄μ‘΄λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 8080 ν¬νŠΈμ—μ„œ λ™μž‘ν•˜λ©°, kqueue(macOS) / epoll(Linux)을 μ‚¬μš©ν•˜λŠ” 단일 μŠ€λ ˆλ“œ 이벀트 루프 μœ„μ—μ„œ 닀쀑 ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μ²˜λ¦¬ν•©λ‹ˆλ‹€.

λͺ…λ Ή μ„€λͺ…
getu /etc/passwdμ—μ„œ μ‚¬μš©μž λͺ©λ‘ μΆ”μΆœ
<user>:getinfo UID, GID, Home Dir λ“±
<user>:get_proc ν•΄λ‹Ή μœ μ €μ˜ ps 좜λ ₯
<user>:get_quota λ””μŠ€ν¬ μΏΌν„° 쑰회
<user>:set_quota:<soft>:<hard>:<fs> μΏΌν„° μ„€μ •
get_fstab_quota_list usrquota ν™œμ„± FS λͺ©λ‘
trace <keyword> /var/log/renux.log 검색

닀쀑 응닡은 END_OF_LIST\n μ„Όν‹°λ„¬λ‘œ μ’…κ²°λ©λ‹ˆλ‹€. V1 인증은 djb2 ν•΄μ‹œ 기반이며, μƒˆλ‘œ λ„μž…ν•œ PBKDF2 ν•΄μ‹œλ‘œμ˜ 점진적 ꡐ체가 μ§„ν–‰ μ€‘μž…λ‹ˆλ‹€.


🚧 ν–₯ν›„ κ°œμ„  과제

  • λ§ˆμŠ€ν„° ν΄λŸ¬μŠ€ν„°ν™”: λΆ„μ‚° ν•©μ˜(Raft λ“±)둜 단일 μž₯애점 제거
  • ML 기반 이상 탐지: λˆ„μ  둜그λ₯Ό ν•™μŠ΅ λ°μ΄ν„°λ‘œ ν™œμš©, ν˜ΈμŠ€νŠΈλ³„ ν‰μƒμ‹œ λΆ„ν¬μ—μ„œμ˜ outlier 탐지
  • SBOMΒ·λ°”μ΄λ„ˆλ¦¬ 무결성: μ—μ΄μ „νŠΈΒ·λ§ˆμŠ€ν„° λ°”μ΄λ„ˆλ¦¬ μ„œλͺ…κ³Ό μΈ‘μ •κ°’ λΆ€μ°©μœΌλ‘œ ꡐ체·무λ ₯ν™” μ‹œλ‚˜λ¦¬μ˜€ λŒ€λΉ„
  • V1 인증 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜: server_e의 인증을 djb2 β†’ PBKDF2둜 μ™„μ „ ꡐ체

πŸ“š κ΄€λ ¨ λ¬Έμ„œ

  • docs/EBPF_IMPL.md β€” eBPF κ΅¬ν˜„ 상세
  • docs/EBPF_REPORT.md β€” eBPF λ„μž… κ²°κ³Ό λ³΄κ³ μ„œ
  • docs/PLAN.md β€” V2 β†’ V3 λ‘œλ“œλ§΅
  • docs/REPORT.md β€” μ’…ν•© λ³΄κ³ μ„œ
  • docs/REVIEW_ANALYSIS.md β€” μ½”λ“œ 리뷰 뢄석
  • docs/TEST_REPORT.md β€” ν…ŒμŠ€νŠΈ κ²°κ³Ό

About

manages statement of linux in remote comfortably.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors