Skip to content

LEEKIYOON-SEC/Linux_sec

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

2 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

secchk โ€” Linux ์„œ๋ฒ„ ์นจํ•ดํ”์  ์ ๊ฒ€ ์Šคํฌ๋ฆฝํŠธ

๋งค์ผ 1ํšŒ cron์œผ๋กœ ์ž๋™ ์‹คํ–‰๋˜์–ด ํ˜ธ์ŠคํŠธ ๋‚ด๋ถ€์˜ ์นจํ•ด ํ”์ ์„ ์ฐพ์•„๋‚ด๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋กœ์ปฌ์— ์ €์žฅํ•˜๋ฉด ์šด์˜์ž๊ฐ€ SSH๋กœ ํšŒ์ˆ˜ํ•˜๋Š” ๋‹จ์ผ ์‰˜ ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค. ์™ธ๋ถ€ ํ†ต์‹  ์—†์ด ๋™์ž‘ํ•˜๋ฏ€๋กœ ์˜คํ”„๋ผ์ธ ํ™˜๊ฒฝ์—์„œ๋„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๋ชฉ์ฐจ

์‹œ์ž‘ํ•˜๊ธฐ

์„ค์น˜์™€ ์ผ์ƒ ์šด์˜

์ ๊ฒ€ ๊ธฐ๋Šฅ

์‚ฌ๊ณ  ๋Œ€์‘๊ณผ ํ•œ๊ณ„

์ฐธ๊ณ 


1. ํ•œ ์ค„ ์†Œ๊ฐœ

๋ฐฉํ™”๋ฒฝยทWAFยทIDS ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ์žฅ๋น„๋งŒ์œผ๋กœ๋Š” "์ด ์„œ๋ฒ„ ๋‚ด๋ถ€๊ฐ€ ์‹ค์ œ๋กœ ์นจํ•ด๋๋Š”๊ฐ€?"๋ฅผ ์•Œ๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ด ์Šคํฌ๋ฆฝํŠธ๋Š” ๊ฐ ์„œ๋ฒ„์—์„œ ์ž์ฒด์ ์œผ๋กœ ์นจํ•ด์˜ ํ”์ ์„ ์ฐพ๋Š” 16์ข… ์ ๊ฒ€์„ ๋งค์ผ 1ํšŒ ์ˆ˜ํ–‰ํ•˜๊ณ , ๊ฒฐ๊ณผ๋ฅผ ์šด์˜์ž๊ฐ€ ๋งค์ผ 1๋ถ„ ์•ˆ์— ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ์ •๋ฆฌํ•ด์ค๋‹ˆ๋‹ค.


2. ์ด ์Šคํฌ๋ฆฝํŠธ์˜ ์„ฑ๊ฒฉ

ํ•ญ๋ชฉ ๋‚ด์šฉ
๋™์ž‘ ๋ฐฉ์‹ ๊ฐ ์„œ๋ฒ„์—์„œ cron์œผ๋กœ ๋งค์ผ 1ํšŒ ์‹คํ–‰
ํ†ต์‹  ์™ธ๋ถ€ ํ†ต์‹  0๊ฑด (์™ธ๋ถ€ ํ†ต์‹  ์—†์ด ๋‹จ๋… ๋™์ž‘ (์˜คํ”„๋ผ์ธ ํ™˜๊ฒฝ ํฌํ•จ))
๊ฒฐ๊ณผ ํšŒ์ˆ˜ ๋กœ์ปฌ ํŒŒ์ผ๋กœ ์ €์žฅ, ์šด์˜์ž๊ฐ€ SSH๋กœ ์ง์ ‘ ํšŒ์ˆ˜
๋ฐฐํฌ ๋‹จ์œ„ ๋‹จ์ผ ํŒŒ์ผ secchk.sh ํ•˜๋‚˜๋งŒ USB๋กœ ๋ฐ˜์ž…
์™ธ๋ถ€ ์˜์กด์„ฑ ClamAV ์‹œ๊ทธ๋‹ˆ์ฒ˜๋งŒ USB๋กœ ์ •๊ธฐ ๋ฐ˜์ž… (์˜ต์…˜, --no-clamav๋กœ ๋Œ ์ˆ˜ ์žˆ์Œ)
๋Œ€์ƒ OS RHEL/CentOS ๊ณ„์—ด, Ubuntu/Debian ๊ณ„์—ด (์ž๋™ ๊ฐ์ง€)
๊ถŒํ•œ root๋กœ ์‹คํ–‰ (์‹œ์Šคํ…œ ํŒŒ์ผ ์ ‘๊ทผ ํ•„์š”)

์ด ์Šคํฌ๋ฆฝํŠธ๋Š” ์นจํ•ด ํ”์ ์„ ์ฐพ๋Š” ๋„๊ตฌ์ด์ง€ ์ฐจ๋‹จํ•˜๋Š” ๋„๊ตฌ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ฐœ๊ฒฌ๋œ ์‹ ํ˜ธ๋ฅผ ๋ณด๊ณ  ๋‹ค์Œ ํ–‰๋™(๋ณด์กดยท๊ฒฉ๋ฆฌยทํฌ๋ Œ์‹)์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์€ ์šด์˜์ž์˜ SOP์ž…๋‹ˆ๋‹ค.


3. ๋™์ž‘ ๋ฐฉ์‹ ํ•œ๋ˆˆ์—

์‹คํ–‰ ํ๋ฆ„

๋งค์ผ 03:30 cron
    โ”‚
    โ–ผ
secchk.sh --mode daily   (16๊ฐœ ์ ๊ฒ€ ๋ชจ๋“ˆ ์ˆœ์ฐจ ์‹คํ–‰)
    โ”‚
    โ–ผ
output/YYYYMMDD/  +  output/latest ์‹ฌ๋ณผ๋ฆญ๋งํฌ ๊ฐฑ์‹ 

16๊ฐœ ์ ๊ฒ€ ๋ชจ๋“ˆ ๊ทธ๋ฃน

๊ทธ๋ฃน ๋ชจ๋“ˆ
๊ณ„์ •ยท์ ‘๊ทผ 10 ๊ณ„์ • / 11 ๋กœ๊ทธ์ธ ์ด๋ ฅ / 16 SSH ์ธ์ฆ
๋„คํŠธ์›Œํฌ 12 ๋„คํŠธ์›Œํฌ ์ƒํƒœ / 21 ๋„คํŠธ์›Œํฌ ์„ค์ •
ํ”„๋กœ์„ธ์ŠคยทํŒŒ์ผ 13 ํ”„๋กœ์„ธ์Šค / 14 ํŒŒ์ผ ์ด์ƒ / 15 ์ง€์†์„ฑ
์‹œ์Šคํ…œ ๋ฌด๊ฒฐ์„ฑ 18 ๋กœ๊ทธ ๋ณ€์กฐ / 19 ์ปค๋„ ๋ชจ๋“ˆ / 20 ํŒจํ‚ค์ง€ ๋ฌด๊ฒฐ์„ฑ
์‘์šฉ ์˜์—ญ 17 ์›น์‰˜ / 22 ๋ฉ”์ผ ํ / 23 ์ปจํ…Œ์ด๋„ˆ
์•ˆํ‹ฐ๋ฐ”์ด๋Ÿฌ์Šค 24 ClamAV / 25 rkhunter(์˜ต์…˜)

์‚ฐ์ถœ๋ฌผ (output/YYYYMMDD/)

ํŒŒ์ผ ์šฉ๋„
SUMMARY.txt ๋งค์ผ ํ•œ ์ค„ ์š”์•ฝ (๊ฐ€์žฅ ์ž์ฃผ ๋ณด๋Š” ํŒŒ์ผ)
report.html ๋ธŒ๋ผ์šฐ์ €์šฉ ์นด๋“œํ˜• ๋ฆฌํฌํŠธ
result.json JSONL ์ƒ์„ธ
diff_from_yesterday.txt ์–ด์ œ์™€ ์˜ค๋Š˜์˜ ๋ฐœ๊ฒฌ ์ฐจ์ด
full.log ์‹คํ–‰ ๋กœ๊ทธ

์ถ”๊ฐ€๋กœ output/ ๋ฃจํŠธ์—๋Š” latest ์‹ฌ๋ณผ๋ฆญ๋งํฌ์™€ ์ผ์ž๋ณ„ ๋ˆ„์ ์ธ SUMMARY_INDEX.txt๊ฐ€ ์ž๋™ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ๋™์ž‘ ์›๋ฆฌ ๋‘ ๊ฐ€์ง€

  1. ์–ด์ œ vs ์˜ค๋Š˜ ์ž๊ฐ€ diff โ€” "๊ฐ‘์ž๊ธฐ ์ƒ๊ธด ๊ฒƒ"์„ ํƒ์ง€. ์–ด์ œ ์—†๋˜ SSH ํ‚ค, ์–ด์ œ ์—†๋˜ LISTEN ํฌํŠธ, ์–ด์ œ ์—†๋˜ SUID ํŒŒ์ผ ๋“ฑ.
  2. ์•Œ๋ ค์ง„ ์ •์ƒ๊ฐ’๊ณผ ๋น„๊ต โ€” ๋ฐฐํฌํŒ ํŒจํ‚ค์ง€์— ๋“ค์–ด์žˆ๋Š” ์ •์ƒ ํ•ด์‹œ(rpm -V/debsums)์™€ ํ˜„์žฌ ์‹œ์Šคํ…œ ํŒŒ์ผ์„ ๋น„๊ตํ•˜์—ฌ ๋ณ€์กฐ ํƒ์ง€.

4. ๋น ๋ฅธ ์‹œ์ž‘ (3๋ถ„ ์ฒดํฌ๋ฆฌ์ŠคํŠธ)

์šด์˜์ž๊ฐ€ ์ฒ˜์Œ ํ•œ ๋ฒˆ๋งŒ ๋”ฐ๋ผํ•˜๋ฉด ๋์ž…๋‹ˆ๋‹ค.

โ˜ 1๋‹จ๊ณ„: ํŒŒ์ผ ๋ฐฐ์น˜

sudo mkdir -p /opt/secchk
sudo cp secchk.sh        /opt/secchk/
sudo cp -r patterns/     /opt/secchk/
sudo cp etc/secchk.conf.sample /etc/secchk.conf
sudo chmod 700 /opt/secchk/secchk.sh
sudo chmod 600 /etc/secchk.conf

โ˜ 2๋‹จ๊ณ„: ์„ค์ • ์ˆ˜์ •

/etc/secchk.conf๋ฅผ ์—ด์–ด ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค (์ž์„ธํ•œ ๋‚ด์šฉ์€ 7. ์„ค์ •).

# ์ตœ์†Œํ•œ ๋‹ค์Œ ๋‘ ๊ฐ€์ง€๋งŒ ํ™•์ธํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
WEB_ROOTS="/var/www /usr/share/nginx/html"   # ์›น ์„œ๋ฒ„ ์•„๋‹ˆ๋ฉด ๋นˆ ๊ฐ’
TRUSTED_DNS=""                                # ์™ธ๋ถ€ ๊ณต์šฉ DNS(8.8.8.8 ๋“ฑ)๋ฅผ ์ •์ƒ์œผ๋กœ
                                              # ์‚ฌ์šฉํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ๋งŒ ๊ทธ IP๋ฅผ ๋“ฑ๋ก.
                                              # ์‚ฌ๋‚ด DNS๋Š” ์‚ฌ์„ค๋ง IP๋ผ ์ž๋™ ์‹ ๋ขฐ๋จ.

โ˜ 3๋‹จ๊ณ„: cron ๋“ฑ๋ก

sudo tee /etc/cron.d/secchk > /dev/null <<'EOF'
SHELL=/bin/bash
30 3 * * * root /opt/secchk/secchk.sh --mode daily >/dev/null 2>&1
EOF
sudo chmod 600 /etc/cron.d/secchk

โ˜ 4๋‹จ๊ณ„: ํ•œ ๋ฒˆ ์ˆ˜๋™ ์‹คํ–‰ํ•ด ๋™์ž‘ ํ™•์ธ

sudo /opt/secchk/secchk.sh --mode daily
cat /opt/secchk/output/latest/SUMMARY.txt

โ†’ STATUS:CLEAN ์ด ๋‚˜์˜ค๋ฉด ์„ฑ๊ณต์ž…๋‹ˆ๋‹ค. ๊ฐ€๋™ ์ฒซ 8์ผ ๋™์•ˆ์—๋Š” ์˜†์— WARMUP_PERIOD ํƒœ๊ทธ๊ฐ€ ํ•จ๊ป˜ ํ‘œ์‹œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (์ •์ƒ).

โ˜ 5๋‹จ๊ณ„: ClamAV ์‹œ๊ทธ๋‹ˆ์ฒ˜ USB ๋ฐ˜์ž… (์„ ํƒ)

ClamAV๋ฅผ ์“ฐ๋ ค๋ฉด 8. ClamAV ์‹œ๊ทธ๋‹ˆ์ฒ˜ USB ๋ฐ˜์ž… ์ ˆ์ฐจ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. ์•ˆ ์“ฐ๋ ค๋ฉด cron ๋ผ์ธ์— --no-clamav๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

โ˜ 6๋‹จ๊ณ„: ์ฒซ 8์ผ ๋™์•ˆ์€ WARMUP_PERIOD

๊ฐ€๋™ ํ›„ ์ฒซ 8์ผ์€ ๋น„๊ต ๊ธฐ์ค€์ด ๋ถ€์กฑํ•˜๋ฏ€๋กœ ์•ˆ์ •ํ™” ๊ธฐ๊ฐ„์ž…๋‹ˆ๋‹ค. SUMMARY์— WARMUP_PERIOD ํƒœ๊ทธ๊ฐ€ ํ‘œ์‹œ๋˜๋ฉฐ, ์–ด์ œ ๋น„๊ต ๊ฒ€์‚ฌ๋Š” INFO๋กœ ๊ฒฉํ•˜๋ฉ๋‹ˆ๋‹ค. 8์ผ์ด ์ง€๋‚˜๋ฉด ์ž๋™ ์ •์ƒ ๋ชจ๋“œ๋กœ ์ง„์ž…ํ•ฉ๋‹ˆ๋‹ค (12. ์ฒซ 8์ผ).


5. ๊ฒฐ๊ณผ ํ™”๋ฉด ์˜ˆ์‹œ

์ •์ƒ ์ƒํƒœ์ผ ๋•Œ SUMMARY.txt ํ•œ ์ค„๊ณผ HTML ๋ฆฌํฌํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณด์ž…๋‹ˆ๋‹ค.

$ cat /opt/secchk/output/latest/SUMMARY.txt
[2026-05-30 03:30:12] HIGH:0 MEDIUM:0 LOW:0 INFO:4 ERROR:0 ELAPSED:7s STATUS:CLEAN HOST:web01 MODE:daily

๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ณธ report.html ํ™”๋ฉด (์ •์ƒ ์ƒํƒœ):

์ •์ƒ ์ƒํƒœ ๋ฆฌํฌํŠธ

์œ„ ์ด๋ฏธ์ง€๋Š” ์‹ค์ œ secchk.sh ๊ฐ€ ์ƒ์„ฑํ•œ output/latest/report.html ์„ ๊ทธ๋Œ€๋กœ ์บก์ฒ˜ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šด์˜์ž๊ฐ€ scp ๋กœ ๋ฐ›์•„ ๋ธŒ๋ผ์šฐ์ €๋กœ ์—ด๋ฉด ๊ฐ™์€ ํ™”๋ฉด์„ ๋ด…๋‹ˆ๋‹ค.

SUMMARY ์˜ STATUS: ๋Š” ์„ธ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.

STATUS ์˜๋ฏธ
CLEAN HIGH/MEDIUM ๋ฐœ๊ฒฌ ์—†์Œ. ์˜ค๋Š˜์€ ํ‰์†Œ๋Œ€๋กœ.
WARN MEDIUM ๋ฐœ๊ฒฌ ์žˆ์Œ. HIGH ๋Š” ์—†์ง€๋งŒ ํ•œ ๋ฒˆ ๊ฒ€ํ†  ๊ถŒ์žฅ.
ALERT HIGH ๋ฐœ๊ฒฌ 1๊ฑด ์ด์ƒ. ์ฆ‰์‹œ ํ™•์ธ ํ•„์š”.

6. ๋งค์ผ ์šด์˜ ๋ฃจํ‹ด

๋งค์ผ ์•„์นจ 1๋ถ„ ์ ๊ฒ€

ssh web01 'cat /opt/secchk/output/latest/SUMMARY.txt'

์ถœ๋ ฅ ์˜ˆ์‹œ:

[2026-05-30 03:30:12] HIGH:0 MEDIUM:0 LOW:0 INFO:4 ERROR:0 ELAPSED:7s STATUS:CLEAN HOST:web01 MODE:daily

STATUS:CLEAN ์ด๋ฉด ๋. STATUS:WARN ์ด๋ฉด ํ•œ ๋ฒˆ ํ›‘์–ด๋ณด๊ณ , STATUS:ALERT ์ด๋ฉด ์ฆ‰์‹œ ์ƒ์„ธ ํ™•์ธ์œผ๋กœ ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค.

ALERT๊ฐ€ ๋–ด์„ ๋•Œ

# ์–ด์ œ์™€ ์˜ค๋Š˜์˜ ์ฐจ์ด ํ™•์ธ
ssh web01 'cat /opt/secchk/output/latest/diff_from_yesterday.txt'

# HIGH ํ•ญ๋ชฉ๋งŒ ์ถ”์ถœ
ssh web01 'grep "HIGH" /opt/secchk/output/latest/result.json'

# HTML ๋‹ค์šด๋กœ๋“œํ•ด์„œ ๋ธŒ๋ผ์šฐ์ €๋กœ ์ž์„ธํžˆ
scp web01:/opt/secchk/output/latest/report.html ./web01-$(date +%Y%m%d).html

๋‹ค์ค‘ ์„œ๋ฒ„ ์ผ๊ด„ ํ™•์ธ

#!/bin/bash
# check_all.sh โ€” ์šด์˜์ž PC์—์„œ ์‹คํ–‰
for srv in web01 web02 db01 app01; do
  printf '%-8s  ' "$srv"
  ssh "$srv" 'cat /opt/secchk/output/latest/SUMMARY.txt 2>/dev/null || echo "NO_DATA"'
done

์ถ”์„ธ ๋ถ„์„ (์ตœ๊ทผ 30์ผ)

ssh web01 'tail -30 /opt/secchk/output/SUMMARY_INDEX.txt'

์ถœ๋ ฅ ์˜ˆ์‹œ:

2026-05-23  03:30  HIGH:0   MEDIUM:1   LOW:0    CLEAN
2026-05-24  03:30  HIGH:0   MEDIUM:1   LOW:0    CLEAN
2026-05-25  03:31  HIGH:0   MEDIUM:1   LOW:0    CLEAN
2026-05-26  03:30  HIGH:3   MEDIUM:5   LOW:1    ALERT  โ˜…
2026-05-27  03:30  HIGH:0   MEDIUM:1   LOW:0    CLEAN

โ˜… ํ‘œ์‹œ๊ฐ€ ์žˆ๋Š” ๋‚ ์€ ALERT๊ฐ€ ๋ฐœ์ƒํ•œ ๋‚ ์ด๋ฉฐ, ํ•ด๋‹น ์ผ์ž ๋””๋ ‰ํ† ๋ฆฌ๋Š” ์ž๋™ ๋ณด์กด๋ฉ๋‹ˆ๋‹ค (retention ์ •์ฑ… ๋ฌด์‹œ).


7. ์„ค์ • (secchk.conf)

์„ค์ • ํŒŒ์ผ์€ ๋‹ค์Œ ์šฐ์„ ์ˆœ์œ„๋กœ ์ž๋™ ํƒ์ƒ‰๋ฉ๋‹ˆ๋‹ค.

  1. --config <๊ฒฝ๋กœ> ์ธ์ž
  2. /etc/secchk.conf
  3. secchk.sh ์™€ ๊ฐ™์€ ๋””๋ ‰ํ† ๋ฆฌ์˜ secchk.conf
  4. ์—†์œผ๋ฉด ์Šคํฌ๋ฆฝํŠธ ๋‚ด์žฅ ๊ธฐ๋ณธ๊ฐ’

etc/secchk.conf.sample์„ ๋ณต์‚ฌํ•ด์„œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ํ•ญ๋ชฉ

# โ”€โ”€โ”€ ์ ๊ฒ€ ๋Œ€์ƒ ๋””๋ ‰ํ† ๋ฆฌ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
# HOTSPOTS: ๋งค์ผ ์ ๊ฒ€ํ•  ํ•ซ์ŠคํŒŸ (๊ณต๊ฒฉ ํ‘œ์  1์ˆœ์œ„ + ๋ณ€๋™ ์žฆ์€ ๊ณณ)
HOTSPOTS="/tmp /dev/shm /var/tmp /var/www /usr/share/nginx /opt/tomcat/webapps"

# ROTATE_<์š”์ผ>: ์š”์ผ๋ณ„ 1/7์”ฉ ์ ๊ฒ€ํ•  ์ฝœ๋“œ ์˜์—ญ (7์ผ์— ํ•œ ๋ฐ”ํ€ด)
ROTATE_Mon="/etc"
ROTATE_Tue="/usr/bin /bin"
ROTATE_Wed="/usr/sbin /sbin"
ROTATE_Thu="/home"
ROTATE_Fri="/root /opt"
ROTATE_Sat="/usr/local /srv"
ROTATE_Sun="/var/spool /var/lib"

# โ”€โ”€โ”€ ์›น์‰˜ ์ ๊ฒ€ ๋Œ€์ƒ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
WEB_ROOTS="/var/www /usr/share/nginx/html /opt/tomcat/webapps"

# โ”€โ”€โ”€ ์‹ ๋ขฐ ์™ธ๋ถ€ DNS (์‚ฌ์„ค๋ง ์™ธ IP ์ค‘ ์ •์ƒ์œผ๋กœ ์ธ์ •ํ•  ๊ฒƒ๋งŒ ๋“ฑ๋ก) โ”€โ”€โ”€โ”€โ”€
# ์‚ฌ๋‚ด DNS๋Š” ๋ณดํ†ต ์‚ฌ์„ค๋ง IP๋ผ ์ž๋™ ์‹ ๋ขฐ๋ฉ๋‹ˆ๋‹ค. ์™ธ๋ถ€ ๊ณต์šฉ DNS(8.8.8.8 ๋“ฑ)๋ฅผ
# ์ •์ƒ ์šด์˜์— ์“ฐ๋Š” ํ™˜๊ฒฝ์—์„œ๋งŒ ๊ทธ IP๋ฅผ ๋“ฑ๋กํ•˜์„ธ์š”. ๊ทธ ์™ธ ํ™˜๊ฒฝ์—์„œ๋Š” ๋นˆ ๊ฐ’.
TRUSTED_DNS=""

# โ”€โ”€โ”€ ๊ฒฐ๊ณผ ๋ณด๊ด€ / ์ž์› โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
KEEP_DAYS=30                 # 30์ผ ์ดˆ๊ณผ ๋””๋ ‰ํ† ๋ฆฌ ์ž๋™ ์‚ญ์ œ (HIGH ์ผ์ž๋Š” ๋ณด์กด)
MIN_FREE_MB=1024             # ๋””์Šคํฌ ์—ฌ์œ  1GB ๋ฏธ๋งŒ์ด๋ฉด ์ ๊ฒ€ ์ค‘๋‹จ
THROTTLE_SLEEP=0.1           # ์ ๊ฒ€ ํ•ญ๋ชฉ ์‚ฌ์ด sleep (๋ถ€ํ•˜ ๋ถ„์‚ฐ)
CLAMAV_MAX_VMEM_KB=1500000   # ClamAV ๋ฉ”๋ชจ๋ฆฌ ์ƒํ•œ (1.5GB)

# โ”€โ”€โ”€ ์ž„๊ณ„๊ฐ’ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
FAILED_LOGIN_THRESHOLD=20    # ๋™์ผ IP ๋กœ๊ทธ์ธ ์‹คํŒจ ์ž„๊ณ„
MAIL_QUEUE_THRESHOLD=100     # ๋ฉ”์ผ ํ ์ž„๊ณ„

# โ”€โ”€โ”€ ํ•ต์‹ฌ ํŒจํ‚ค์ง€ ํ’€ ๊ฒ€์ฆ (20_system_integrity) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
# ๋ณ€์กฐ๋˜๋ฉด ๊ฑฐ์˜ ํ™•์‹คํžˆ ์นจํ•ด์ธ ์‹œ์Šคํ…œ ๋ช…๋ น์–ด ํŒจํ‚ค์ง€. ๋ณดํ˜ธ ๋Œ€์ƒ ์ถ”๊ฐ€ ์‹œ ์—ฌ๊ธฐ์—.
CORE_PKGS_RHEL="coreutils util-linux procps-ng net-tools iproute openssh-server openssh-clients shadow-utils pam"
CORE_PKGS_DEBIAN="coreutils util-linux procps net-tools iproute2 openssh-server openssh-client login libpam-modules libpam-runtime"

ํ•ซ์ŠคํŒŸ / ์ฝœ๋“œ ๋ถ„ํ• ์ด๋ž€?

์ „์ฒด ๋””์Šคํฌ๋ฅผ ๋งค์ผ ํ’€์Šค์บ”ํ•˜๋ฉด ๋ถ€ํ•˜๊ฐ€ ํฝ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ž์ฃผ ๋ณ€ํ•˜๊ณ  ๊ณต๊ฒฉ ํ‘œ์ ์ธ ์˜์—ญ(/tmp, ์›น ๋ฃจํŠธ ๋“ฑ)์€ ๋งค์ผ ์ ๊ฒ€ํ•˜๊ณ , ๋ณ€๋™์ด ์ ์€ ์‹œ์Šคํ…œ ์˜์—ญ(/etc, /usr/bin ๋“ฑ)์€ ์š”์ผ๋ณ„ 1/7์”ฉ ๋‚˜๋ˆ ์„œ ์ ๊ฒ€ํ•ฉ๋‹ˆ๋‹ค. ์ผ์ฃผ์ผ์ด ์ง€๋‚˜๋ฉด ๋ชจ๋“  ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์ตœ์†Œ 1ํšŒ์”ฉ ๊ฒ€์‚ฌ๋ฉ๋‹ˆ๋‹ค.


8. ClamAV ์‹œ๊ทธ๋‹ˆ์ฒ˜ USB ๋ฐ˜์ž… ์ ˆ์ฐจ

ClamAV๋Š” ์•Œ๋ ค์ง„ ์•…์„ฑ์ฝ”๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜์™€ ๋””์Šคํฌ ํŒŒ์ผ์„ ๋น„๊ตํ•˜๋Š” ์•ˆํ‹ฐ๋ฐ”์ด๋Ÿฌ์Šค์ž…๋‹ˆ๋‹ค. ์‹œ๊ทธ๋‹ˆ์ฒ˜ ๊ฐฑ์‹ ์„ ์œ„ํ•ด ์™ธ๋ถ€ ์ธํ„ฐ๋„ท์ด ํ•„์š”ํ•˜๋ฏ€๋กœ, ์™ธ๋ถ€ ์ธํ„ฐ๋„ท์ด ์—†๋Š” ํ™˜๊ฒฝ์—์„œ๋Š” USB๋กœ ์ •๊ธฐ ๋ฐ˜์ž…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ ˆ์ฐจ

1) ์™ธ๋ถ€ ์ธํ„ฐ๋„ท์ด ๊ฐ€๋Šฅํ•œ PC์—์„œ

# Ubuntu/Debian
sudo apt install -y clamav-freshclam
sudo systemctl stop clamav-freshclam
sudo freshclam

# RHEL/CentOS
sudo dnf install -y clamav-update
sudo freshclam

๋‹ค์Œ ์„ธ ํŒŒ์ผ์ด /var/lib/clamav/์— ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  • main.cvd (์•ฝ 200MB) โ€” ๋ฉ”์ธ ์‹œ๊ทธ๋‹ˆ์ฒ˜
  • daily.cvd (์•ฝ 30MB) โ€” ์ผ์ผ ์ถ”๊ฐ€ ์‹œ๊ทธ๋‹ˆ์ฒ˜
  • bytecode.cvd (์•ฝ 300KB) โ€” ๋ฐ”์ดํŠธ์ฝ”๋“œ ๋ฃฐ

2) USB์— ๋ณต์‚ฌ + ์ฒดํฌ์„ฌ ๊ธฐ๋ก

mkdir -p /mnt/usb/clamav
cd /var/lib/clamav
sudo cp main.cvd daily.cvd bytecode.cvd /mnt/usb/clamav/
cd /mnt/usb/clamav
sha256sum *.cvd > checksums.txt

3) ์‚ฌ๋‚ด ์„œ๋ฒ„๋กœ ๋ฐ˜์ž… (USB ์—ฐ๊ฒฐ ํ›„)

# ์ฒดํฌ์„ฌ ๊ฒ€์ฆ
cd /mnt/usb/clamav
sha256sum -c checksums.txt

# ์ •์ƒ์ด๋ฉด ๋ฐฐ์น˜
sudo cp main.cvd daily.cvd bytecode.cvd /var/lib/clamav/
sudo chown clamav:clamav /var/lib/clamav/*.cvd
sudo chmod 644 /var/lib/clamav/*.cvd

4) ํ™•์ธ

clamscan --version
# โ†’ ClamAV 1.4.4/27420/Thu May 30 02:58:38 2026

๋‹ค์Œ daily ์ ๊ฒ€ ์‹œ ์ž๋™์œผ๋กœ ์ƒˆ ์‹œ๊ทธ๋‹ˆ์ฒ˜๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋ฐ˜์ž… ์ฃผ๊ธฐ ๊ถŒ์žฅ

๋ถ„๊ธฐ 1ํšŒ ์ด์ƒ (๊ฐ€๋Šฅํ•˜๋ฉด ์›” 1ํšŒ). ์‹œ๊ทธ๋‹ˆ์ฒ˜ ํŒŒ์ผ์ด 30์ผ์„ ๋„˜์œผ๋ฉด secchk ๊ฐ€ ์ž๋™์œผ๋กœ MEDIUM stale_signature ๊ฒฝ๊ณ ๋ฅผ ๋„์›๋‹ˆ๋‹ค.


9. ์ ๊ฒ€ ๋ชจ๋“ˆ 16๊ฐœ

๊ฐ ๋ชจ๋“ˆ์€ ๋ฌด์—‡์„ ๋ณด๋Š”์ง€ / ์™œ ๋ณด๋Š”์ง€ / ํƒ์ง€๋˜๋ฉด ์–ด๋–ป๊ฒŒ์˜ 3๋ถ„ ๊ตฌ์กฐ๋กœ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

16๊ฐœ ๋ชจ๋“ˆ์ด ์ •์˜๋˜์–ด ์žˆ์ง€๋งŒ, ํ™˜๊ฒฝ ์กฐ๊ฑด์ด ์•ˆ ๋งž์œผ๋ฉด ์ผ๋ถ€๋Š” ์ž๋™์œผ๋กœ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. ์˜ˆ) ๋ฉ”์ผ ๋ฐ๋ชฌ(postfix/sendmail)์ด ์—†์œผ๋ฉด 22 ์ž๋™ skip, docker/podman ๋‘˜ ๋‹ค ์—†์œผ๋ฉด 23 ์ž๋™ skip, ClamAV ๋ฏธ์„ค์น˜์ด๊ฑฐ๋‚˜ --no-clamav์ด๋ฉด 24 skip, rkhunter๋Š” --with-rkhunter ์˜ต์…˜ ์‚ฌ์šฉ ์‹œ์—๋งŒ ๋™์ž‘. SUMMARY.txt/result.json์˜ INFO ํ•ญ๋ชฉ์œผ๋กœ skip ์‚ฌ์œ ๊ฐ€ ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.

10_account โ€” ๊ณ„์ • ๋ฌด๊ฒฐ์„ฑ

๋ฌด์—‡์„ ๋ณด๋‚˜์š”?

  • /etc/passwd, /etc/shadow, /etc/group ํŒŒ์ผ์˜ ํ•ด์‹œ๊ฐ€ ์–ด์ œ์™€ ๋‹ค๋ฅธ์ง€
  • root ๊ถŒํ•œ(UID 0)์„ ๊ฐ€์ง„ ๊ณ„์ •์ด root ์™ธ์— ๋˜ ์žˆ๋Š”์ง€
  • ๋น„์–ด์žˆ๋Š” ํŒจ์Šค์›Œ๋“œ๋ฅผ ๊ฐ€์ง„ ๊ณ„์ •์ด ์žˆ๋Š”์ง€
  • ์–ด์ œ ์—†๋˜ ์‹ ๊ทœ ๊ณ„์ •์ด ์ถ”๊ฐ€๋๋Š”์ง€
  • sudoers ํŒŒ์ผ์— "ํŒจ์Šค์›Œ๋“œ ์—†์ด sudo ๊ฐ€๋Šฅ(NOPASSWD)" ๋ผ์ธ์ด ์ƒˆ๋กœ ์ƒ๊ฒผ๋Š”์ง€
  • ๋กœ๊ทธ์ธ์ด ๋ง‰ํžŒ ์‹œ์Šคํ…œ ๊ณ„์ •(/sbin/nologin)์ธ๋ฐ SSH ํ‚ค๋งŒ ๋“ฑ๋ก๋˜์–ด ์žˆ๋Š”์ง€
  • .bash_history ํŒŒ์ผ์ด ์‹ฌ๋ณผ๋ฆญ๋งํฌ๋กœ ๋ฐ”๋€Œ์—ˆ๋Š”์ง€ (ํžˆ์Šคํ† ๋ฆฌ ๋ฌด๋ ฅํ™” ์˜์‹ฌ)

์™œ ๋ด์•ผ ํ•˜๋‚˜์š”? ๊ณต๊ฒฉ์ž๊ฐ€ ์„œ๋ฒ„๋ฅผ ์žฅ์•…ํ•œ ํ›„ ๊ฐ€์žฅ ๋จผ์ € ํ•˜๋Š” ์ผ์ด "๋‹ค์Œ์— ๋‹ค์‹œ ๋“ค์–ด์˜ฌ ํ†ต๋กœ ๋งŒ๋“ค๊ธฐ"์ž…๋‹ˆ๋‹ค. ์ƒˆ ์‚ฌ์šฉ์ž ๊ณ„์ •์„ ์Šฌ์ฉ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜, sudo๋ฅผ ํŒจ์Šค์›Œ๋“œ ์—†์ด ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค๊ฑฐ๋‚˜, ๋กœ๊ทธ์ธ ๋ง‰ํ˜€์žˆ๋˜ ์‹œ์Šคํ…œ ๊ณ„์ •์— SSH ํ‚ค๋ฅผ ์‹ฌ์Šต๋‹ˆ๋‹ค. ์ •์ƒ ์šด์˜์—์„œ ์ด๋Ÿฐ ๋ณ€๊ฒฝ์€ ์šด์˜์ž๊ฐ€ ์ž๊ธฐ ์†์œผ๋กœ ํ•œ ์ผ์ด๋ผ ์•Œ๊ณ  ์žˆ์ง€๋งŒ, ์นจํ•ด ์‹œ์—๋Š” ๋ชจ๋ฅด๊ฒŒ ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค.

ํƒ์ง€๋˜๋ฉด ์–ด๋–ป๊ฒŒ ํ•˜๋‚˜์š”?

  1. result.json์—์„œ ์–ด๋–ค ๊ฒ€์‚ฌ๊ฐ€ ์žกํ˜”๋Š”์ง€ ํ™•์ธ
  2. ์šด์˜ํŒ€์— "์ด ๊ณ„์ • ๋งŒ๋“œ์‹  ๋ถ„ ๊ณ„์‹ ๊ฐ€์š”?" ํ™•์ธ
  3. ๋ชจ๋‘๊ฐ€ "๋ชจ๋ฅธ๋‹ค"๊ณ  ๋‹ตํ•˜๋ฉด ์นจํ•ด ์˜์‹ฌ โ€” ๊ฒฐ๊ณผ ๋ณด์กด ํ›„ ๊ฒฉ๋ฆฌ ๊ฒ€ํ† 
  4. ์ •์ƒ ์ถ”๊ฐ€๋ผ๋ฉด ์šด์˜ ๊ธฐ๋ก์— ๋“ฑ๋ก

11_login_history โ€” ๋กœ๊ทธ์ธ ์ด๋ ฅ

๋ฌด์—‡์„ ๋ณด๋‚˜์š”?

  • last๋กœ ์ƒˆ๋ฒฝ 2~5์‹œ root ์„ฑ๊ณต ๋กœ๊ทธ์ธ์ด ์žˆ๋Š”์ง€ (์™ธ๋ถ€ IP๋Š” ๊ฐ•์กฐ)
  • lastb๋กœ ๋™์ผ IP์—์„œ ์ž„๊ณ„(๊ธฐ๋ณธ 20ํšŒ) ์ด์ƒ ์‹คํŒจ๊ฐ€ ์žˆ๋Š”์ง€
  • ๊ฐ™์€ ์‚ฌ์šฉ์ž ๊ณ„์ •์ด 1์‹œ๊ฐ„ ์•ˆ์— 3๊ฐœ ์ด์ƒ ์„œ๋กœ ๋‹ค๋ฅธ ํ˜ธ์ŠคํŠธ์—์„œ ๋กœ๊ทธ์ธํ–ˆ๋Š”์ง€

์™œ ๋ด์•ผ ํ•˜๋‚˜์š”? ์ •์ƒ ์šด์˜์ž๋Š” ์—…๋ฌด ์‹œ๊ฐ„์— ์ต์ˆ™ํ•œ ์‚ฌ๋‚ด IP์—์„œ ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋ฒฝ ๋ฌด์ธ ์‹œ๊ฐ„๋Œ€์˜ root ์ ‘์†์ด๋‚˜, ์งง์€ ์‹œ๊ฐ„์— ์—ฌ๋Ÿฌ IP์—์„œ ๊ฐ™์€ ๊ณ„์ • ๋กœ๊ทธ์ธ์ด ์„ฑ๊ณตํ•˜๋Š” ๊ฑด ์ž๊ฒฉ์ฆ๋ช… ํƒˆ์ทจ์˜ ์‹ ํ˜ธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํƒ์ง€๋˜๋ฉด ์–ด๋–ป๊ฒŒ ํ•˜๋‚˜์š”?

  • ์™ธ๋ถ€ IP์—์„œ์˜ ์ƒˆ๋ฒฝ root ์ ‘์†์ด๋ฉด: ๋ฐฉํ™”๋ฒฝ ๋ฃฐ ๊ฒ€ํ†  + ํŒจ์Šค์›Œ๋“œ/SSH ํ‚ค ์ฆ‰์‹œ ์žฌ๋ฐœ๊ธ‰
  • ๋™์ผ IP ๋ฌด์ฐจ๋ณ„ ์‹คํŒจ๊ฐ€ ์ž„๊ณ„ ์ดˆ๊ณผ๋ฉด: ํ•ด๋‹น IP ์ฐจ๋‹จ
  • ๋‹ค์ค‘ IP ๋™์‹œ ๋กœ๊ทธ์ธ์ด๋ฉด: ๊ณ„์ • ํƒˆ์ทจ ์˜์‹ฌ โ€” ํŒจ์Šค์›Œ๋“œ ๋ณ€๊ฒฝ

์ฐธ๊ณ : ๋ณธ ๋ชจ๋“ˆ์€ ์ •๋ณด์„ฑ์ด ๊ฐ•ํ•ด ๋Œ€๋ถ€๋ถ„ MEDIUM/INFO์ž…๋‹ˆ๋‹ค. ์ •์ƒ ์•ผ๊ฐ„ ์ž‘์—…์ด ์žกํžˆ๋ฉด ์šด์˜ํŒ€์ด ์ธ์ง€ํ•˜๊ณ  ์žˆ๋Š”์ง€๋งŒ ํ™•์ธํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.


12_network โ€” ๋„คํŠธ์›Œํฌ ์ƒํƒœ

๋ฌด์—‡์„ ๋ณด๋‚˜์š”?

  • TCP/UDP LISTEN ํฌํŠธ ๋ชฉ๋ก์ด ์–ด์ œ์™€ ๋‹ค๋ฅธ์ง€ (์‹ ๊ทœ LISTEN์€ HIGH)
  • ESTABLISHED ์—ฐ๊ฒฐ ์ค‘ ์‚ฌ๋‚ด๋ง(10.x, 172.16~31.x, 192.168.x) ์™ธ IP๊ฐ€ ์žˆ๋Š”์ง€
  • ARP ํ…Œ์ด๋ธ”์— ๊ฐ™์€ IP์— ์—ฌ๋Ÿฌ MAC, ๋˜๋Š” ๊ฐ™์€ MAC์— ์—ฌ๋Ÿฌ IP๊ฐ€ ๋ณด์ด๋Š”์ง€
  • ๋ฐฉํ™”๋ฒฝ ์„ค์ •(iptables-save, firewall-cmd, ufw)์ด ์–ด์ œ์™€ ๋‹ค๋ฅธ์ง€

์™œ ๋ด์•ผ ํ•˜๋‚˜์š”? ๊ณต๊ฒฉ์ž๊ฐ€ ์„œ๋ฒ„์— ๋ฐฑ๋„์–ด๋ฅผ ์„ค์น˜ํ•˜๋ฉด ์™ธ๋ถ€์—์„œ ๋‹ค์‹œ ์ ‘์†ํ•˜๊ธฐ ์œ„ํ•œ ํฌํŠธ๋ฅผ ์—ด๊ฑฐ๋‚˜ (Bind shell), ๊ณต๊ฒฉ์ž ์„œ๋ฒ„๋กœ ์ •๊ธฐ ์—ฐ๊ฒฐ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค (Reverse shell). ๋‘˜ ๋‹ค ๋„คํŠธ์›Œํฌ ์ƒํƒœ์— ํ”์ ์ด ๋‚จ์Šต๋‹ˆ๋‹ค.

ํƒ์ง€๋˜๋ฉด ์–ด๋–ป๊ฒŒ ํ•˜๋‚˜์š”?

  1. ์‹ ๊ทœ LISTEN ํฌํŠธ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฐพ๊ธฐ: ss -tnlp | grep :<ํฌํŠธ>
  2. ๊ทธ ํ”„๋กœ์„ธ์Šค์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ ๊ฒฝ๋กœ ํ™•์ธ: ls -la /proc/<pid>/exe
  3. ๋น„ํ‘œ์ค€ ์œ„์น˜(/tmp, /dev/shm)์—์„œ ๋„์›Œ์กŒ๋‹ค๋ฉด ์นจํ•ด ํ™•์ • โ€” ์ฆ‰์‹œ ๊ฒฉ๋ฆฌ
  4. ์ •์ƒ ์„œ๋น„์Šค ๋„์ž…์ด๋ฉด ์šด์˜ ๊ธฐ๋ก์— ๋“ฑ๋ก

13_process โ€” ํ”„๋กœ์„ธ์Šค ๋ฌด๊ฒฐ์„ฑ (๋ฃจํŠธํ‚ท ํ•ต์‹ฌ)

๋ฌด์—‡์„ ๋ณด๋‚˜์š”?

  • /proc์—๋Š” ๋ณด์ด๋Š”๋ฐ ps๋กœ๋Š” ๋ณด์ด์ง€ ์•Š๋Š” "์ˆจ๊ฒจ์ง„ PID" (1์ดˆ ๊ฐ„๊ฒฉ 2ํšŒ ์ธก์ •ํ•ด ๊ฑฐ์ง“์–‘์„ฑ ์ œ๊ฑฐ)
  • ํ”„๋กœ์„ธ์Šค ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ๋””์Šคํฌ์—์„œ ์‚ญ์ œ๋๋Š”๋ฐ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋Œ๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ((deleted))
  • /tmp, /dev/shm, /var/tmp ๊ฐ™์€ ์ž„์‹œ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค
  • ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ init(PID 1)์ธ๋ฐ ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž ๊ถŒํ•œ์ธ ๊ฒฝ์šฐ
  • ์ž„์‹œ ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” .so ํŒŒ์ผ์„ ๋ฉ”๋ชจ๋ฆฌ ๋งคํ•‘ํ•œ ํ”„๋กœ์„ธ์Šค (์ฝ”๋“œ ์ธ์ ์…˜ ์˜์‹ฌ)

์™œ ๋ด์•ผ ํ•˜๋‚˜์š”? LKM ๋ฃจํŠธํ‚ท์€ ps ๋ช…๋ น์˜ ๊ฒฐ๊ณผ์—์„œ ์ž๊ธฐ PID๋ฅผ ์ˆจ๊น๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ปค๋„์ด ์ง์ ‘ ๋…ธ์ถœํ•˜๋Š” /proc/<pid>/๋Š” ๊ฐ€๋ฆด ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, ์ด ๋‘˜์˜ ์ฐจ์ด๊ฐ€ ๋ฃจํŠธํ‚ท ํƒ์ง€์˜ ๊ฒฐ์ •์  ๋‹จ์„œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋˜ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์ฃผ ์•…์„ฑ์ฝ”๋“œ๋Š” ๋””์Šคํฌ ํŒŒ์ผ์„ ์ง€์›Œ ํ”์ ์„ ์—†์• ์ง€๋งŒ, /proc/<pid>/exe ์‹ฌ๋ณผ๋ฆญ๋งํฌ๊ฐ€ (deleted)๋กœ ๋‚จ์•„ ์žกํž™๋‹ˆ๋‹ค.

ํƒ์ง€๋˜๋ฉด ์–ด๋–ป๊ฒŒ ํ•˜๋‚˜์š”?

  1. ์ฆ‰์‹œ ๋„คํŠธ์›Œํฌ ๊ฒฉ๋ฆฌ (๊ณต๊ฒฉ์ž ์žฌ์ ‘์† ์ฐจ๋‹จ)
  2. cat /proc/<pid>/cmdline, readlink /proc/<pid>/exe๋กœ ์ถ”๊ฐ€ ์ •๋ณด ์ˆ˜์ง‘
  3. /proc/<pid>/exe๋ฅผ ๋‹ค๋ฅธ ์œ„์น˜์— ๋ณต์‚ฌํ•ด ๋ถ„์„์šฉ ๋ณด์กด
  4. ๋ฉ”๋ชจ๋ฆฌ dump ๋ฐ ์ „๋ฌธ ํฌ๋ Œ์‹ ๋„๊ตฌ๋กœ ๋ถ„์„
  5. ๋ฃจํŠธํ‚ท ์™„์ „ ์ œ๊ฑฐ๊ฐ€ ์–ด๋ ค์šฐ๋ฉด ์‹œ์Šคํ…œ ์žฌ์„ค์น˜ ๊ฒ€ํ† 

14_file_anomaly โ€” ํŒŒ์ผ ์‹œ์Šคํ…œ ์ด์ƒ

๋ฌด์—‡์„ ๋ณด๋‚˜์š”? ํ•ซ์ŠคํŒŸ(๋งค์ผ) + ์˜ค๋Š˜ ์š”์ผ์˜ ์ฝœ๋“œ ์˜์—ญ(์ฃผ 1ํšŒ)์—์„œ:

  • ์–ด์ œ ์—†๋˜ SUID/SGID ํŒŒ์ผ (๊ด€๋ฆฌ์ž ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ํŒŒ์ผ)
  • ์–ด์ œ ์—†๋˜ world-writable ํŒŒ์ผ (๋ˆ„๊ตฌ๋‚˜ ์ˆ˜์ • ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ)
  • 24์‹œ๊ฐ„ ์•ˆ์— ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ ๋ชฉ๋ก
  • /tmp, /dev/shm, /var/tmp์˜ ์ˆจ๊น€ ํŒŒ์ผ ๋˜๋Š” ์‹คํ–‰๊ถŒํ•œ ํŒŒ์ผ (7์ผ ๋‚ด ์ƒ์„ฑ)

์™œ ๋ด์•ผ ํ•˜๋‚˜์š”? SUID ํŒŒ์ผ์€ ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๊ฐ€ ์‹คํ–‰ํ•ด๋„ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ณต๊ฒฉ์ž๊ฐ€ ์ž๊ธฐ ๋ฐฑ๋„์–ด์— SUID๋ฅผ ๋ถ™์ด๋ฉด ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž ๊ถŒํ•œ๋งŒ ๊ฐ€์ง€๊ณ ๋„ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. /tmp๋‚˜ /dev/shm์˜ ์ˆจ๊น€ ์‹คํ–‰ ํŒŒ์ผ(.x, .sshd ๊ฐ™์€)์€ ๊ฑฐ์˜ ํ•ญ์ƒ ์นจํ•ด ํ”์ ์ž…๋‹ˆ๋‹ค.

ํƒ์ง€๋˜๋ฉด ์–ด๋–ป๊ฒŒ ํ•˜๋‚˜์š”?

  1. ์‹ ๊ทœ SUID ํŒŒ์ผ์ด๋ฉด: stat์œผ๋กœ ์†Œ์œ ์ž/์ƒ์„ฑ ์‹œ๊ฐ ํ™•์ธ
  2. ์ •์ƒ ํŒจํ‚ค์ง€์ธ์ง€ ํ™•์ธ: rpm -qf <ํŒŒ์ผ> ๋˜๋Š” dpkg -S <ํŒŒ์ผ>
  3. ํŒจํ‚ค์ง€์— ์†ํ•˜์ง€ ์•Š์œผ๋ฉด ์นจํ•ด ๊ฐ€๋Šฅ์„ฑ โ€” ๋ณด์กด ํ›„ ๊ฒฉ๋ฆฌ
  4. /tmp/.x ๊ฐ™์€ ํŒจํ„ด์€ 13_process์™€ ๊ต์ฐจ ํ™•์ธ (์‹ค์ œ ์‹คํ–‰ ์ค‘์ธ์ง€)

15_persistence โ€” ์ง€์†์„ฑ ๋ฉ”์ปค๋‹ˆ์ฆ˜

๋ฌด์—‡์„ ๋ณด๋‚˜์š”?

  • cron ๊ด€๋ จ ์œ„์น˜ ์ „์ฒด(/etc/crontab, /etc/cron.{hourly,daily,weekly,monthly}/*, /var/spool/cron/*)๊ฐ€ ์–ด์ œ์™€ ๋‹ค๋ฅธ์ง€
  • ์‹ ๊ทœ systemd timer๊ฐ€ ๋“ฑ๋ก๋๋Š”์ง€
  • /etc/rc.local, /etc/init.d/*์— ๋ณ€๊ฒฝ์ด ์žˆ๋Š”์ง€
  • /etc/ld.so.preload ํŒŒ์ผ์˜ ์กด์žฌ ์ž์ฒด (๋Œ€๋ถ€๋ถ„ ์‹œ์Šคํ…œ์—์„œ ์—†๋Š” ๊ฒŒ ์ •์ƒ)
  • LD_PRELOAD ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ systemd ์„œ๋น„์Šค / ์‹œ์Šคํ…œ ํ™˜๊ฒฝ ํŒŒ์ผ / ์‚ฌ์šฉ์ž ์…ธ ์„ค์ •์— ์žˆ๋Š”์ง€
  • /etc/profile, /etc/bashrc ๋“ฑ์— ์˜์‹ฌ ๋ช…๋ น(curl, wget, nc, bash -i, /dev/tcp/)์ด ๋“ค์–ด ์žˆ๋Š”์ง€
  • /etc/skel/์— ์ตœ๊ทผ 30์ผ ๋‚ด ๋ณ€๊ฒฝ์ด ์žˆ๋Š”์ง€ (์ƒˆ ๊ณ„์ •๋งˆ๋‹ค ์ž๋™ ๊ฐ์—ผ)

์™œ ๋ด์•ผ ํ•˜๋‚˜์š”? ๊ณต๊ฒฉ์ž๊ฐ€ ๋“ค์–ด์™”๋‹ค ๋‚˜๊ฐ€๋ฉด ๋์ด ์•„๋‹™๋‹ˆ๋‹ค. ์žฌ๋ถ€ํŒ… ํ›„์—๋„ ๋‹ค์‹œ ์‹คํ–‰๋˜๋„๋ก ๋ฐฑ๋„์–ด๋ฅผ ์ง€์†ํ™”ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ํ”ํ•œ ์ˆ˜๋ฒ•์ด cron, systemd timer, rc.local, profile ์Šคํฌ๋ฆฝํŠธ, LD_PRELOAD์ž…๋‹ˆ๋‹ค. ํŠนํžˆ /etc/ld.so.preload๋Š” ๋ชจ๋“  ๋™์  ๋งํฌ ํ”„๋กœ๊ทธ๋žจ์— ์ž๊ธฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ•์ œ๋กœ ๋ผ์›Œ๋„ฃ๋Š” ๊ฐ•๋ ฅํ•œ ๋ฃจํŠธํ‚ท ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

ํƒ์ง€๋˜๋ฉด ์–ด๋–ป๊ฒŒ ํ•˜๋‚˜์š”?

  1. ์‹ ๊ทœ cron/timer ๋‚ด์šฉ ํ™•์ธ: cat, crontab -l -u <user>
  2. /etc/ld.so.preload๊ฐ€ ๋ฐœ๊ฒฌ๋˜๋ฉด ๊ทธ ์•ˆ์— ๋ช…์‹œ๋œ .so ํŒŒ์ผ์ด ์ •์ƒ์ธ์ง€ ํ™•์ธ
  3. ์˜์‹ฌ ์Šคํฌ๋ฆฝํŠธ๋ฉด ์ฆ‰์‹œ ๋น„ํ™œ์„ฑํ™” (systemctl mask, cron ํ•ญ๋ชฉ ์ œ๊ฑฐ)
  4. ๋ณ€๊ฒฝ ์‹œ๊ฐ๊ณผ 11_login_history ๊ต์ฐจ ํ™•์ธ โ€” ๋ˆ„๊ฐ€ ์–ธ์ œ ๋กœ๊ทธ์ธํ–ˆ๋Š”์ง€

16_ssh_auth โ€” SSH ์ธ์ฆ

๋ฌด์—‡์„ ๋ณด๋‚˜์š”?

  • ๋ชจ๋“  ์‚ฌ์šฉ์ž์˜ ~/.ssh/authorized_keys๊ฐ€ ์–ด์ œ์™€ ๋‹ค๋ฅธ์ง€ (์‹ ๊ทœ ํ‚ค 1์ค„์ด๋ผ๋„ HIGH)
  • sshd -T๋กœ ์ถ”์ถœํ•œ effective ์„ค์ •(PermitRootLogin, PasswordAuthentication, AllowUsers, Port ๋“ฑ)์ด ์–ด์ œ์™€ ๋‹ค๋ฅธ์ง€
  • /etc/pam.d/ ์•ˆ์— ์ตœ๊ทผ 24์‹œ๊ฐ„ ๋‚ด ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ์ด ์žˆ๋Š”์ง€
  • /etc/securetty๊ฐ€ ๋ณ€๊ฒฝ๋๋Š”์ง€

์™œ ๋ด์•ผ ํ•˜๋‚˜์š”? SSH ํ‚ค ์ถ”๊ฐ€๋Š” ๊ณต๊ฒฉ์ž๊ฐ€ ๊ฐ€์žฅ ํ”ํ•˜๊ฒŒ ์“ฐ๋Š” ์žฌ์ ‘์† ๋ฐฑ๋„์–ด์ž…๋‹ˆ๋‹ค. ํŒจ์Šค์›Œ๋“œ ๋ณ€๊ฒฝ์€ ์šด์˜์ž์—๊ฒŒ ์ฆ‰์‹œ ๋“คํ‚ค์ง€๋งŒ, authorized_keys์— ํ‚ค ํ•œ ์ค„ ์ถ”๊ฐ€๋Š” ๊ฑฐ์˜ ์•ˆ ๋“คํ‚ต๋‹ˆ๋‹ค. PAM ๋ชจ๋“ˆ ๋ณ€์กฐ๋Š” ํŒจ์Šค์›Œ๋“œ๋ฅผ ๊ฐ€๋กœ์ฑ„๊ฑฐ๋‚˜ ํŠน์ • ์ž…๋ ฅ์œผ๋กœ ์ธ์ฆ์„ ์šฐํšŒํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

ํƒ์ง€๋˜๋ฉด ์–ด๋–ป๊ฒŒ ํ•˜๋‚˜์š”?

  1. ์‹ ๊ทœ SSH ํ‚ค์˜ comment ํ•„๋“œ ํ™•์ธ (๋ณดํ†ต user@host ํ˜•์‹, ๋‚ฏ์„  ํ˜ธ์ŠคํŠธ๋ฉด ์˜์‹ฌ)
  2. ํ•ด๋‹น ์‚ฌ์šฉ์ž์˜ last ์ถœ๋ ฅ๊ณผ ๊ต์ฐจ โ€” ์–ธ์ œ ๋กœ๊ทธ์ธํ–ˆ๋Š”์ง€
  3. ์ฆ‰์‹œ ํ‚ค ์ œ๊ฑฐ + ํ•ด๋‹น ์‚ฌ์šฉ์ž ํŒจ์Šค์›Œ๋“œ ์žฌ๋ฐœ๊ธ‰
  4. sshd ์„ค์ • ๋ณ€๊ฒฝ์ด ์šด์˜ ์˜๋„๊ฐ€ ์•„๋‹ˆ๋ฉด ์ฆ‰์‹œ ์›๋ณต

17_webshell โ€” ์›น์‰˜

๋ฌด์—‡์„ ๋ณด๋‚˜์š”? WEB_ROOTS๋กœ ์ง€์ •๋œ ๋””๋ ‰ํ† ๋ฆฌ์˜ PHP/JSP/ASP ํŒŒ์ผ์—์„œ ๋‹ค์Œ ํŒจํ„ด ๋งค์นญ:

  • eval(base64_decode($_POST[...])) ๊ฐ™์€ ๋‚œ๋…ํ™”๋œ ์ฝ”๋“œ ์‹คํ–‰
  • system($_GET[...]) ์ฒ˜๋Ÿผ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ๊ทธ๋Œ€๋กœ ๋ช…๋ น์œผ๋กœ ๋„˜๊ธฐ๋Š” ์ฝ”๋“œ
  • Runtime.exec, new ProcessBuilder (JSP)
  • WScript.Shell, Shell.Application (ASP)
  • c99shell, r57shell, FilesMan, wso ๊ฐ™์€ ๊ณต๊ฐœ ์›น์‰˜ ๋งค์ง ๋ฌธ์ž์—ด

์™œ ๋ด์•ผ ํ•˜๋‚˜์š”? WAF๋Š” HTTP ์š”์ฒญ์„ ๋ณด์ง€๋งŒ, ๊ณต๊ฒฉ์ž๊ฐ€ ์ด๋ฏธ ์›น์‰˜ ์—…๋กœ๋“œ์— ์„ฑ๊ณตํ•œ ํ›„์—” ๊ทธ ์›น์‰˜์ด ์ฒ˜๋ฆฌํ•˜๋Š” ํŠธ๋ž˜ํ”ฝ์€ ์ •์ƒ ์‘๋‹ต์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ๋””์Šคํฌ์— ๋‚จ์€ ํŒŒ์ผ์„ ์ •๊ธฐ์ ์œผ๋กœ ์Šค์บ”ํ•˜๋Š” ๊ฒŒ ์‚ฌ์‹ค์ƒ ์œ ์ผํ•œ ์‚ฌํ›„ ํƒ์ง€ ์ˆ˜๋‹จ์ž…๋‹ˆ๋‹ค.

ํƒ์ง€๋˜๋ฉด ์–ด๋–ป๊ฒŒ ํ•˜๋‚˜์š”?

  1. ๋งค์นญ ํŒŒ์ผ์˜ ๋ณ€๊ฒฝ ์‹œ๊ฐ(stat) ํ™•์ธ โ†’ ํ•ด๋‹น ์‹œ๊ฐ์˜ ์›น ์•ก์„ธ์Šค ๋กœ๊ทธ ๋ถ„์„
  2. ์–ด๋–ค ํŽ˜์ด์ง€๋ฅผ ํ†ตํ•ด ์—…๋กœ๋“œ๋๋Š”์ง€ ์ถ”์  โ†’ ์ทจ์•ฝ ํŽ˜์ด์ง€ ํŒจ์น˜
  3. ์›น์‰˜ ํŒŒ์ผ์€ ๋ณ„๋„ ์œ„์น˜์— ๋ณด์กด ํ›„ ์‚ญ์ œ (๋ถ„์„์šฉ)
  4. ๊ฐ™์€ ํŒจํ„ด ์ถ”๊ฐ€ ๊ฒ€์ƒ‰: grep -r '<๊ณต๊ฒฉ์ž_id_๋˜๋Š”_์ƒ์ˆ˜>' /var/www/

18_log_tamper โ€” ๋กœ๊ทธ ๋ณ€์กฐ + ์‹œ๊ฐ„ ๋™๊ธฐํ™”

๋ฌด์—‡์„ ๋ณด๋‚˜์š”?

  • wtmp/btmp/secure(RHEL) ๋˜๋Š” auth.log(Ubuntu)/messages(๋˜๋Š” syslog) ํŒŒ์ผ์ด:
    • ์–ด์ œ ๋Œ€๋น„ ์‚ฌ์ด์ฆˆ๊ฐ€ ์ค„์–ด๋“ค์—ˆ๋Š”์ง€ (์ •์ƒ ์šด์˜์—์„œ ๋กœ๊ทธ๋Š” ์ฆ๊ฐ€๋งŒ ํ•จ)
    • ์‹ฌ๋ณผ๋ฆญ๋งํฌ๋กœ ๋ฐ”๋€Œ์—ˆ๋Š”์ง€
    • 0๋ฐ”์ดํŠธ์ธ์ง€
  • journalctl --verify๋กœ systemd journal ๋ฌด๊ฒฐ์„ฑ ํ™•์ธ
  • chronyc/ntpq๋กœ ์‹œ์Šคํ…œ ์‹œ๊ฐ์ด NTP ๊ธฐ์ค€๊ณผ 1์ดˆ ์ด์ƒ ์–ด๊ธ‹๋‚ฌ๋Š”์ง€

์™œ ๋ด์•ผ ํ•˜๋‚˜์š”? ๊ณต๊ฒฉ์ž๊ฐ€ ์นจํ•ด ํ›„ ๊ฐ€์žฅ ๋จผ์ € ํ•˜๋Š” ํ”์  ์ง€์šฐ๊ธฐ๊ฐ€ ๋กœ๊ทธ ์‚ญ์ œ/๋ณ€์กฐ์ž…๋‹ˆ๋‹ค. ์ •์ƒ ์šด์˜์—์„œ ๋กœ๊ทธ ํŒŒ์ผ์€ ์ ˆ๋Œ€ ์ž‘์•„์ง€์ง€ ์•Š์œผ๋ฏ€๋กœ(rotation ์งํ›„ 1ํšŒ ์˜ˆ์™ธ) ์‚ฌ์ด์ฆˆ ๊ฐ์†Œ๋Š” ๊ฒฐ์ •์  ๋‹จ์„œ์ž…๋‹ˆ๋‹ค. ์‹œ๊ฐ„์„ ๊ฑฐ๊พธ๋กœ ๋Œ๋ฆฌ๋ฉด ๋กœ๊ทธ์˜ timestamp ์ž์ฒด๊ฐ€ ๋ฌด๋ ฅํ™”๋˜๋ฏ€๋กœ, ์‹œ๊ฐ„ ๋™๊ธฐํ™” ์ ๊ฒ€๋„ ๊ฐ™์€ ๋งฅ๋ฝ์—์„œ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

ํƒ์ง€๋˜๋ฉด ์–ด๋–ป๊ฒŒ ํ•˜๋‚˜์š”?

  1. ์ฆ‰์‹œ ๋ฉ”๋ชจ๋ฆฌ dump + ๋””์Šคํฌ ์ด๋ฏธ์ง€ ๋ณด์กด (๋‹ค๋ฅธ ํ”์ ๋„ ์‚ฌ๋ผ์ง€๊ธฐ ์ „์—)
  2. ๋ฐฑ์—…๋ณธ ๋กœ๊ทธ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋Œ€์กฐ
  3. ์นจํ•ด ์‹œ์  ์ถ”์ • ์–ด๋ ค์›€ โ€” ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋กœ๊ทธ ์†Œ์Šค ์ข…ํ•ฉ ๋ถ„์„
  4. ์‹œ๊ฐ„์ด ์–ด๊ธ‹๋‚ฌ๋‹ค๋ฉด NTP ์ •์ƒํ™” + ๋ณ€์กฐ ์˜์‹ฌ ์‹œ๊ฐ ์ถ”์ •

19_kernel_module โ€” ์ปค๋„ ๋ชจ๋“ˆ

๋ฌด์—‡์„ ๋ณด๋‚˜์š”?

  • lsmod ์ถœ๋ ฅ์ด ์–ด์ œ์™€ ๋‹ค๋ฅธ์ง€. ์‹ ๊ทœ ๋ชจ๋“ˆ์€ HIGH, ์‚ฌ๋ผ์ง„ ๋ชจ๋“ˆ์€ INFO.

์™œ ๋ด์•ผ ํ•˜๋‚˜์š”? LKM(Loadable Kernel Module) ๋ฃจํŠธํ‚ท์€ ์ปค๋„ ์˜์—ญ์—์„œ ๋™์ž‘ํ•˜๋ฏ€๋กœ ์‚ฌ์šฉ์ž ์˜์—ญ์˜ ํƒ์ง€๋ฅผ ์šฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์ •์ƒ ์šด์˜์—์„œ ์ปค๋„ ๋ชจ๋“ˆ์ด ๊ฐ‘์ž๊ธฐ ์ถ”๊ฐ€๋˜๋Š” ์ผ์€ ๋“œ๋ฌผ๊ณ  (๋Œ€๋ถ€๋ถ„ ํŒจํ‚ค์ง€ ์—…๋ฐ์ดํŠธ๋‚˜ ์šด์˜์ž์˜ ๋ช…์‹œ์  ์ž‘์—…), ๊ทธ ์‚ฌ๊ฑด์€ ์šด์˜์ž๊ฐ€ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์šด์˜์ž๊ฐ€ ๋ชจ๋ฅด๋Š” ์‹ ๊ทœ ๋ชจ๋“ˆ์€ ๊ฑฐ์˜ ํ•ญ์ƒ ์˜์‹ฌ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

ํƒ์ง€๋˜๋ฉด ์–ด๋–ป๊ฒŒ ํ•˜๋‚˜์š”?

  1. ์‹ ๊ทœ ๋ชจ๋“ˆ ์ •๋ณด ํ™•์ธ: modinfo <module>
  2. ์ •์ƒ ํŒจํ‚ค์ง€ ๋ชจ๋“ˆ์ธ์ง€: rpm -qf $(modinfo -F filename <module>)
  3. ์˜์‹ฌ ๋ชจ๋“ˆ์ด๋ฉด ์ฆ‰์‹œ ๊ฒฉ๋ฆฌ (rmmod์€ ๋ฃจํŠธํ‚ท์ด๋ฉด ์•ˆ ๋จน์„ ์ˆ˜ ์žˆ์Œ โ†’ ์žฌ๋ถ€ํŒ… ๊ฒ€ํ† )
  4. /lib/modules/<์ปค๋„๋ฒ„์ „>/์—์„œ ์‹ ๊ทœ .ko ํŒŒ์ผ ํ™•์ธ

20_system_integrity โ€” ํŒจํ‚ค์ง€ ๋ฌด๊ฒฐ์„ฑ

๋ฌด์—‡์„ ๋ณด๋‚˜์š”?

  • RHEL: rpm -Va โ€” ์„ค์น˜๋œ ๋ชจ๋“  ํŒจํ‚ค์ง€์˜ ๋ชจ๋“  ํŒŒ์ผ์„ ์ •์ƒ ํ•ด์‹œ์™€ ๋น„๊ต. checksum/size mismatch๋งŒ, config/doc/ghost ๋“ฑ์€ ํ•„ํ„ฐ๋ง โ†’ MEDIUM
  • Ubuntu: debsums -ac โ€” ์„ค์น˜๋œ ๋ชจ๋“  ํŒจํ‚ค์ง€์˜ ๋ชจ๋“  ํŒŒ์ผ(config ํฌํ•จ) ์ค‘ ๋ณ€๊ฒฝ๋œ ๊ฒƒ๋งŒ ์ถœ๋ ฅ โ†’ MEDIUM
  • ๋‘ ๊ณ„์—ด ๊ณตํ†ต์œผ๋กœ, ์‹œ์Šคํ…œ ํ•ต์‹ฌ ํŒจํ‚ค์ง€(CORE_PKGS_*์— ์ •์˜๋œ coreutils, util-linux, openssh-*, pam ๋“ฑ)๋Š” ๋ณ„๋„ ํ’€ ๊ฒ€์ฆํ•ด์„œ mismatch๊ฐ€ ์žˆ์œผ๋ฉด HIGH (์‹œ์Šคํ…œ ๋ช…๋ น ๋ณ€์กฐ๋Š” ๊ฑฐ์˜ ํ™•์‹คํžˆ ์นจํ•ด)

์šด์˜์ž๊ฐ€ ๋ณดํ˜ธ ๋Œ€์ƒ์„ ๋” ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์œผ๋ฉด secchk.conf์˜ CORE_PKGS_RHEL / CORE_PKGS_DEBIAN์— ํŒจํ‚ค์ง€๋ช…์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ) curl, sudo, audit ๋“ฑ.

์™œ ๋ด์•ผ ํ•˜๋‚˜์š”? ๊ณต๊ฒฉ์ž๊ฐ€ ls, ps, ss, sshd ๊ฐ™์€ ์‹œ์Šคํ…œ ๋ช…๋ น์–ด๋ฅผ trojan ๋ฒ„์ „์œผ๋กœ ๊ต์ฒดํ•˜๋ฉด ์šด์˜์ž๊ฐ€ ๋ณด๋Š” ๋ชจ๋“  ๊ฒฐ๊ณผ๊ฐ€ ๊ฑฐ์ง“์ด ๋ฉ๋‹ˆ๋‹ค. ๋‹คํ–‰ํžˆ ๋ฐฐํฌํŒ ํŒจํ‚ค์ง€์—๋Š” ๋ฉ”์ด์ปค๊ฐ€ ์„œ๋ช…ํ•œ ์ •์ƒ ํ•ด์‹œ๊ฐ€ ๋“ค์–ด ์žˆ์–ด, ์ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ณ€์กฐ ์—ฌ๋ถ€๋ฅผ ์‹ ๋ขฐ์„ฑ ์žˆ๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ ์นจํ•ด๋œ ์„œ๋ฒ„์—์„œ๋„ ๋™์ž‘ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๊ฒ€์ฆ๋ฒ•์ž…๋‹ˆ๋‹ค.

ํƒ์ง€๋˜๋ฉด ์–ด๋–ป๊ฒŒ ํ•˜๋‚˜์š”?

  1. ๋ณ€์กฐ๋œ ํŒŒ์ผ์„ ๋ณ„๋„ ์œ„์น˜์— ๋ฐฑ์—…
  2. ์ •์ƒ ํŒจํ‚ค์ง€ ์žฌ์„ค์น˜: dnf reinstall <pkg> ๋˜๋Š” apt install --reinstall <pkg>
  3. ๋ณ€๊ฒฝ ์‹œ๊ฐ ํ™•์ธ โ†’ ์นจํ•ด ์‹œ์  ์ถ”์ •
  4. ์žฌ์„ค์น˜ ํ›„์—๋„ ๋‹ค์‹œ ๋ณ€์กฐ๋˜๋ฉด ์ง€์†์„ฑ ๋ฉ”์ปค๋‹ˆ์ฆ˜(15_persistence) ๋ฏธ์ œ๊ฑฐ โ€” ๊ทธ์ชฝ ๊ฒฐ๊ณผ ์žฌํ™•์ธ

21_network_config โ€” ๋„คํŠธ์›Œํฌ ์„ค์ • ๋ณ€์กฐ

๋ฌด์—‡์„ ๋ณด๋‚˜์š”?

  • /etc/resolv.conf๊ฐ€ ๋ณ€๊ฒฝ๋๋Š”์ง€ + TRUSTED_DNS์— ์—†๋Š” ์™ธ๋ถ€ nameserver๊ฐ€ ์žˆ๋Š”์ง€
  • /etc/hosts์— ์–ด์ œ ์—†๋˜ ์™ธ๋ถ€ ๋„๋ฉ”์ธ ๋งคํ•‘์ด ์ถ”๊ฐ€๋๋Š”์ง€
  • /etc/nsswitch.conf ๋ณ€๊ฒฝ
  • yum repo / apt sources ํŒŒ์ผ ๋ณ€๊ฒฝ
  • ์‹ ๋ขฐ CA ์ €์žฅ์†Œ(/etc/pki/ca-trust/source/anchors, /usr/local/share/ca-certificates, /etc/ssl/certs)์— ์‹ ๊ทœ ํŒŒ์ผ

์™œ ๋ด์•ผ ํ•˜๋‚˜์š”? ๊ณต๊ฒฉ์ž๊ฐ€ DNS๋ฅผ ์ž๊ธฐ ์„œ๋ฒ„๋กœ ๋Œ๋ฆฌ๋ฉด apt update๋‚˜ yum update๊ฐ€ ์•…์„ฑ ํŒจํ‚ค์ง€๋ฅผ ๋ฐ›๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. /etc/hosts์— ๊ฐ€์งœ ๋งคํ•‘์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์šด์˜์ž๊ฐ€ ์‹ ๋ขฐํ•˜๋Š” ๋„๋ฉ”์ธ์ด ๊ณต๊ฒฉ์ž ์„œ๋ฒ„๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ฐ€์งœ CA๋ฅผ ์‹ ๋ขฐ ์ €์žฅ์†Œ์— ์ฃผ์ž…ํ•˜๋ฉด SSL ๊ฒ€์ฆ์„ ์šฐํšŒํ•˜๋Š” MITM ์ธํ”„๋ผ๊ฐ€ ์™„์„ฑ๋ฉ๋‹ˆ๋‹ค.

ํƒ์ง€๋˜๋ฉด ์–ด๋–ป๊ฒŒ ํ•˜๋‚˜์š”?

  1. ๋ณ€๊ฒฝ ๋ผ์ธ ์ฆ‰์‹œ ์›๋ณต ๋˜๋Š” ๊ฒฉ๋ฆฌ
  2. ๋ณ€๊ฒฝ ์‹œ๊ฐ์˜ ๋กœ๊ทธ์ธ ์ด๋ ฅ ๊ต์ฐจ ํ™•์ธ
  3. ๊ฐ€์งœ CA๋ฉด ๋ฐœ๊ธ‰์ž ์ •๋ณด ํ™•์ธ: openssl x509 -in <ca> -text -noout | head -20
  4. ์˜์‹ฌ repo๋กœ๋ถ€ํ„ฐ ์„ค์น˜๋œ ํŒจํ‚ค์ง€๊ฐ€ ์žˆ์œผ๋ฉด ๋ชจ๋‘ ์žฌ๊ฒ€์ฆ

22_mail_queue โ€” ๋ฉ”์ผ ํ (์ž๋™ skip)

๋ฌด์—‡์„ ๋ณด๋‚˜์š”?

  • postfix/sendmail/mailq ๋ช…๋ น์ด ๋ชจ๋‘ ์—†์œผ๋ฉด ์ž๋™์œผ๋กœ ๊ฑด๋„ˆ๋œ€
  • ์žˆ์„ ๋•Œ๋งŒ: ๋ฉ”์ผ ํ ํฌ๊ธฐ๊ฐ€ ์ž„๊ณ„(๊ธฐ๋ณธ 100๊ฑด)๋ฅผ ๋„˜๋Š”์ง€
  • /var/spool/mqueue, /var/spool/postfix/active, /var/spool/postfix/deferred์˜ ํŒŒ์ผ ์ˆ˜ ํญ์ฆ

์™œ ๋ด์•ผ ํ•˜๋‚˜์š”? ๊ณต๊ฒฉ์ž๊ฐ€ ์„œ๋ฒ„๋ฅผ ์ŠคํŒธ ๋ฐœ์†ก ๋ด‡์œผ๋กœ ํ™œ์šฉํ•˜๋ฉด ๋ฉ”์ผ ํ์— ๋ฐœ์†ก ๋Œ€๊ธฐ ๋ฉ”์ผ์ด ์Œ“์ž…๋‹ˆ๋‹ค. ์นจํ•ด๋œ ์„œ๋ฒ„์—์„œ ํ‰์†Œ์™€ ๋‹ค๋ฅธ ๋ฉ”์ผ ํŠธ๋ž˜ํ”ฝ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฐ€์žฅ ํ”ํ•œ ์‹ ํ˜ธ์ž…๋‹ˆ๋‹ค.

ํƒ์ง€๋˜๋ฉด ์–ด๋–ป๊ฒŒ ํ•˜๋‚˜์š”?

  1. mailq๋กœ ํ ๋‚ด์šฉ ํ™•์ธ โ€” ๋ฐœ์‹ ์ž/์ˆ˜์‹ ์ž ํŒจํ„ด์ด ๋น„์ •์ƒ์ธ์ง€
  2. ๋น„์ •์ƒ์ด๋ฉด ๋ฉ”์ผ ๋ฐœ์†ก ์ฆ‰์‹œ ์ •์ง€: systemctl stop postfix
  3. ๋ฉ”์ผ ๋ฐœ์†ก ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งŒ๋“  ์‚ฌ์šฉ์ž/ํ”„๋กœ์„ธ์Šค ์ถ”์ 

23_container โ€” ์ปจํ…Œ์ด๋„ˆ escape ์œ„ํ—˜ ์„ค์ • (์ž๋™ skip)

๋ฌด์—‡์„ ๋ณด๋‚˜์š”?

  • docker/podman ๋ช…๋ น์ด ๋‘˜ ๋‹ค ์—†์œผ๋ฉด ์ž๋™์œผ๋กœ ๊ฑด๋„ˆ๋œ€
  • ์žˆ์„ ๋•Œ๋งŒ: ์‹คํ–‰ ์ค‘ ์ปจํ…Œ์ด๋„ˆ ์ค‘์—์„œ
    • Privileged=true๋กœ ๋„์›Œ์ง„ ๊ฒƒ (ํ˜ธ์ŠคํŠธ ์ „์ฒด ๊ถŒํ•œ)
    • /, /etc, /proc, /sys, docker.sock ๊ฐ™์€ ๋ฏผ๊ฐ ๊ฒฝ๋กœ๋ฅผ ๋งˆ์šดํŠธํ•œ ๊ฒƒ

์™œ ๋ด์•ผ ํ•˜๋‚˜์š”? Privileged ์ปจํ…Œ์ด๋„ˆ๋‚˜ ํ˜ธ์ŠคํŠธ ๋””๋ ‰ํ† ๋ฆฌ ๋งˆ์šดํŠธ๋Š” ์ปจํ…Œ์ด๋„ˆ escape์˜ ์งํ–‰ ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ root ๊ถŒํ•œ์„ ์–ป์€ ๊ณต๊ฒฉ์ž๊ฐ€ ํ˜ธ์ŠคํŠธ๊นŒ์ง€ ์žฅ์•…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ •์ƒ ์šด์˜์—์„œ๋Š” ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์„ค์ •์ž…๋‹ˆ๋‹ค.

ํƒ์ง€๋˜๋ฉด ์–ด๋–ป๊ฒŒ ํ•˜๋‚˜์š”?

  1. ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ ์ฆ‰์‹œ ์ค‘์ง€: docker stop <id>
  2. ์ด๋ฏธ์ง€ ์ถœ์ฒ˜ ํ™•์ธ โ€” ์‚ฌ๋‚ด ์ •๊ทœ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ๋ฐ›์€ ๊ฒƒ์ธ๊ฐ€?
  3. ๋งˆ์šดํŠธ๋œ ํ˜ธ์ŠคํŠธ ๊ฒฝ๋กœ์— ๋ณ€๊ฒฝ์ด ์žˆ๋Š”์ง€ 14_file_anomaly์™€ ๊ต์ฐจ

24_clamav โ€” ์•ˆํ‹ฐ๋ฐ”์ด๋Ÿฌ์Šค (๊ธฐ๋ณธ ON)

๋ฌด์—‡์„ ๋ณด๋‚˜์š”?

  • clamscan์ด ์„ค์น˜๋ผ ์žˆ๊ณ  /var/lib/clamav/main.cvd๊ฐ€ ์žˆ๋Š”์ง€ (์—†์œผ๋ฉด ERROR)
  • ์‹œ๊ทธ๋‹ˆ์ฒ˜๊ฐ€ 30์ผ ์ด์ƒ ์˜ค๋ž˜๋์œผ๋ฉด MEDIUM ๊ฒฝ๊ณ 
  • ํ•ซ์ŠคํŒŸ(๋งค์ผ) + ์˜ค๋Š˜ ์ฝœ๋“œ ์˜์—ญ์„ ์Šค์บ”
  • ๊ฐ์—ผ ํŒŒ์ผ ๋ฐœ๊ฒฌ ์‹œ ํŒŒ์ผ ๊ฒฝ๋กœ + ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ช… + sha256 ๊ธฐ๋ก โ†’ HIGH

์™œ ๋ด์•ผ ํ•˜๋‚˜์š”? ์ด ์Šคํฌ๋ฆฝํŠธ์˜ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์€ "ํ–‰์œ„ ๊ธฐ๋ฐ˜"(์–ด์ œ์™€ ๋‹ค๋ฅธ ๋ณ€ํ™”) ๋˜๋Š” "ํŒจํ„ด ๊ธฐ๋ฐ˜"(์›น์‰˜ ์ •๊ทœ์‹) ๊ฒ€์‚ฌ์ธ๋ฐ, ์ด๋ฏธ ์•Œ๋ ค์ง„ ํŠธ๋กœ์ด์•ˆ/์›œ/๋ฐฑ๋„์–ด ๋ณ€์ข…์€ ์‹œ๊ทธ๋‹ˆ์ฒ˜ ๋งค์นญ์ด ๊ฐ€์žฅ ๋น ๋ฅด๊ณ  ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ฒ€์‚ฌ๋ฅผ ๋ณด์™„ํ•˜๋Š” ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.

ํƒ์ง€๋˜๋ฉด ์–ด๋–ป๊ฒŒ ํ•˜๋‚˜์š”?

  1. ๊ฐ์—ผ ํŒŒ์ผ์„ ๊ฒฉ๋ฆฌ: ๋ณ„๋„ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ + ๊ถŒํ•œ 600
  2. ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ช…์œผ๋กœ ์œ„ํ˜‘ ์ •๋ณด ๊ฒ€์ƒ‰ (์™ธ๋ถ€ PC์—์„œ)
  3. ๊ฐ™์€ ์‹œ๊ทธ๋‹ˆ์ฒ˜์˜ ๋‹ค๋ฅธ ํŒŒ์ผ์„ ์ „์ฒด ์Šค์บ”์œผ๋กœ ์ถ”๊ฐ€ ๊ฒ€์ƒ‰: sudo /opt/secchk/secchk.sh --mode full
  4. ๊ฐ์—ผ ์‹œ๊ฐ์˜ ์›น/SSH ๋กœ๊ทธ ๋ถ„์„ โ€” ์–ด๋–ป๊ฒŒ ๋“ค์–ด์™”๋Š”์ง€

--no-clamav๋กœ ๋„๋ ค๋ฉด: cron ๋ผ์ธ์— ์˜ต์…˜ ์ถ”๊ฐ€.


25_rkhunter โ€” rkhunter (์˜ต์…˜ --with-rkhunter)

๋ฌด์—‡์„ ๋ณด๋‚˜์š”?

  • rkhunter --check ๊ฒฐ๊ณผ์˜ Warning: ๋ผ์ธ์„ MEDIUM์œผ๋กœ ๋ณด๊ณ 

์™œ ๋ด์•ผ ํ•˜๋‚˜์š”? ClamAV์™€ ๋‹ค๋ฅธ ์‹œ๊ทธ๋‹ˆ์ฒ˜ DB๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋ณด์กฐ ๊ฒ€์ฆ ๋ ˆ์ด์–ด๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋‹จ ๊ฑฐ์ง“์–‘์„ฑ์ด ๋งŽ์•„ ๊ธฐ๋ณธ OFF์ด๋ฉฐ, ์šด์˜์ž๊ฐ€ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ๊ด€๋ฆฌ๋ฅผ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์—์„œ๋งŒ ์ผญ๋‹ˆ๋‹ค.

ํƒ์ง€๋˜๋ฉด ์–ด๋–ป๊ฒŒ ํ•˜๋‚˜์š”?

  1. Warning ๋‚ด์šฉ ํ™•์ธ โ€” ๊ฑฐ์ง“์–‘์„ฑ ๊ฐ€๋Šฅ์„ฑ ๊ฒ€ํ† 
  2. ์ง„์งœ ์œ„ํ˜‘์œผ๋กœ ํŒ๋‹จ๋˜๋ฉด 13_process, 15_persistence์™€ ๊ต์ฐจ
  3. ๊ฑฐ์ง“์–‘์„ฑ์ด๋ฉด /etc/rkhunter.conf์— ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ๋“ฑ๋ก

10. ์นจํ•ด ํƒ์ง€ ์˜ˆ์‹œ

๋‹ค์Œ์€ 12์ข…์˜ ์นจํ•ด๋ฅผ ๋™์‹œ์— ์‹ฌ์–ด๋‘๊ณ  ์ ๊ฒ€์„ ๋Œ๋ฆฐ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค (๊ฒ€์ฆ ์‹œ๋‚˜๋ฆฌ์˜ค B). ์•„๋ž˜ ์ด๋ฏธ์ง€ ์—ญ์‹œ ์‹ค์ œ report.html ์บก์ฒ˜์ž…๋‹ˆ๋‹ค.

์นจํ•ด ํƒ์ง€ ์˜ˆ์‹œ

์‹ฌ์€ ์นจํ•ด์™€ ํƒ์ง€๋œ ๋ชจ๋“ˆ:

์นจํ•ด ํƒ์ง€ ๋ชจ๋“ˆ
์‹ ๊ทœ ์‚ฌ์šฉ์ž ์ถ”๊ฐ€ (useradd hacker_alice) 10 (critical_file_changed ร— 3 + new_account)
sudoers NOPASSWD ๋ผ์ธ 10 (sudoers_changed + new_nopasswd)
/tmp ์˜์‹ฌ ์‹คํ–‰ (.attacker_payload) 13 (suspicious_exec_location + suspicious_mapping)
/opt ์‹ ๊ทœ SUID (.suid_backdoor) 14 (new_suid)
/etc/ld.so.preload ์ƒ์„ฑ 15 (ld_preload_file)
cron.d ์‹ ๊ทœ ๋ฐฑ๋„์–ด 15 (cron_changed)
.bashrc์˜ LD_PRELOAD 15 (ld_preload_user_shell)
์‹ ๊ทœ SSH authorized_key 16 (new_ssh_key)
๋”๋ฏธ ์›น์‰˜ (eval base64_decode) 17 (webshell_pattern_match)
๋กœ๊ทธ ํŒŒ์ผ 0๋ฐ”์ดํŠธ + ์‚ฌ์ด์ฆˆ ๊ฐ์†Œ 18 (log_zero_size ร— 2 + log_size_decreased)
/bin/ls ๋ณ€์กฐ 20 (debsums_mismatch MEDIUM + core_pkg_mismatch HIGH)
/etc/hosts ์™ธ๋ถ€ ๋งคํ•‘ + ๊ฐ€์งœ CA 21 (hosts_external_mapping + new_ca_cert)

โ†’ ์ด HIGH 18 + MEDIUM 6 = STATUS:ALERT. 12์ข… ์นจํ•ด๊ฐ€ 9๊ฐœ ๋ชจ๋“ˆ์—์„œ ๋ชจ๋‘ ํƒ์ง€๋ฉ๋‹ˆ๋‹ค.


11. ๊ฒฐ๊ณผ ์‚ฐ์ถœ๋ฌผ ๊ตฌ์กฐ

/opt/secchk/output/
โ”œโ”€โ”€ latest โ†’ 20260530/              โ† ๋งค์ผ ๊ฐฑ์‹ ๋˜๋Š” ์‹ฌ๋ณผ๋ฆญ๋งํฌ
โ”œโ”€โ”€ SUMMARY_INDEX.txt               โ† ์ผ์ž๋ณ„ ํ•œ ์ค„ ๋ˆ„์  (output/ ๋ฃจํŠธ)
โ”‚
โ””โ”€โ”€ 20260530/                       โ† ์˜ค๋Š˜ ๋””๋ ‰ํ† ๋ฆฌ
    โ”œโ”€โ”€ SUMMARY.txt                 โ† ํ•œ ์ค„ ์š”์•ฝ (๊ฐ€์žฅ ์ž์ฃผ ๋ณด๋Š” ํŒŒ์ผ)
    โ”œโ”€โ”€ result.json                 โ† JSONL ์ƒ์„ธ (๋ชจ๋“ˆ๋ณ„ ๋ฐœ๊ฒฌ ์ „์ฒด)
    โ”œโ”€โ”€ report.html                 โ† ๋ธŒ๋ผ์šฐ์ €์šฉ ์นด๋“œํ˜• ๋ฆฌํฌํŠธ
    โ”œโ”€โ”€ full.log                    โ† ์‹คํ–‰ ๋กœ๊ทธ
    โ”œโ”€โ”€ diff_from_yesterday.txt     โ† ์–ด์ œ์™€ ์˜ค๋Š˜์˜ ๋ฐœ๊ฒฌ ์ฐจ์ด
    โ”œโ”€โ”€ .preserved                  โ† HIGH ๋ฐœ๊ฒฌ ์‹œ ์ž๋™ ์ƒ์„ฑ (retention ๋ฉด์ œ ๋งˆ์ปค)
    โ””โ”€โ”€ state/                      โ† ๋ชจ๋“ˆ๋ณ„ ๋น„๊ต ๊ธฐ์ค€ (๋‹ค์Œ๋‚  ์‚ฌ์šฉ)
        โ”œโ”€โ”€ 10_account/
        โ”œโ”€โ”€ 12_network/
        โ””โ”€โ”€ ...

๊ฐ ํŒŒ์ผ์˜ ์šฉ๋„

ํŒŒ์ผ ์šฉ๋„ ๋ณดํ˜ธ
SUMMARY.txt ๋งค์ผ 1๋ถ„ ์ ๊ฒ€ ์‹œ ๊ฐ€์žฅ ๋จผ์ € ๋ณด๋Š” ํŒŒ์ผ chattr +i ๋ฌด๋‹จ ์‚ญ์ œ ๋ฐฉ์–ด
result.json ์ž๋™ํ™” ๋„๊ตฌ๋กœ ํŒŒ์‹ฑํ•˜๊ฑฐ๋‚˜ grep์œผ๋กœ ๊ฒ€์ƒ‰ chattr +i
report.html ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹œ๊ฐ์ ์œผ๋กœ ํ™•์ธ. ์™ธ๋ถ€ CSS/JS 0๊ฑด chattr +i
full.log ๋””๋ฒ„๊น…, ๋ชจ๋“ˆ ์‹คํ–‰ ์‹œ๊ฐ„ ํ™•์ธ chattr +i
diff_from_yesterday.txt ์–ด์ œ์™€ ๋น„๊ตํ•ด ์ƒˆ๋กœ ๋ฐœ์ƒํ•œ ๋ฐœ๊ฒฌ๋งŒ ๋น ๋ฅด๊ฒŒ chattr +i
state/ ๋‹ค์Œ ์ ๊ฒ€์˜ ๋น„๊ต ๊ธฐ์ค€์ด๋ผ ์ž ๊ทธ์ง€ ์•Š์Œ (๋น„์ž ๊ธˆ)

result.json ํ˜•์‹ (JSONL)

{"ts":"2026-05-30T03:30:12+09:00","host":"web01","module":"16_ssh_auth","check":"new_ssh_key","severity":"HIGH","detail":"์‹ ๊ทœ SSH authorized_key โ€” ์žฌ์ ‘์† ๋ฐฑ๋„์–ด ์˜์‹ฌ","evidence":"root|ssh-rsa AAAA... attacker@evil.com","evidence_sha256":""}

retention ์ •์ฑ…

  • KEEP_DAYS (๊ธฐ๋ณธ 30์ผ) ์ดˆ๊ณผ ๋””๋ ‰ํ† ๋ฆฌ๋Š” ์ž๋™ ์‚ญ์ œ
  • .preserved ํŒŒ์ผ์ด ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ(HIGH ๋ฐœ๊ฒฌ ์ผ์ž)๋Š” ์˜๊ตฌ ๋ณด์กด
  • ์˜ค๋Š˜ ๋””๋ ‰ํ† ๋ฆฌ๋Š” ์ ˆ๋Œ€ ์‚ญ์ œ๋˜์ง€ ์•Š์Œ

12. ์ฒซ 8์ผ โ€” WARMUP_PERIOD

์ด ์Šคํฌ๋ฆฝํŠธ๋Š” ์–ด์ œ vs ์˜ค๋Š˜ ๋น„๊ต๋ฅผ ํ•ต์‹ฌ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ฝœ๋“œ ์˜์—ญ์€ ์š”์ผ๋ณ„๋กœ ํ•œ ๋ฒˆ์”ฉ๋งŒ ์ ๊ฒ€๋˜๋ฏ€๋กœ, ์ฒซ ๋น„๊ต๊ฐ€ ๊ฐ€๋Šฅํ•œ ์‹œ์ ์ด ๊ฐ€๋™ ํ›„ 8์ผ์งธ์ž…๋‹ˆ๋‹ค. ๊ทธ ์ „์— ์•Œ๋žŒ์„ ๋„์šฐ๋ฉด ๋‹จ์ˆœํžˆ "์ฒ˜์Œ ๋ณธ ๋ฐ์ดํ„ฐ"๊ฐ€ ๋ชจ๋‘ ์‹ ๊ทœ๋กœ ์žกํ˜€ ๊ฑฐ์ง“์–‘์„ฑ์ด ํญ์ฆํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๊ฐ€๋™ ํ›„ ์ฒซ 8์ผ ๋™์•ˆ์€ WARMUP_PERIOD ๋ชจ๋“œ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

WARMUP_PERIOD ์ƒํƒœ

WARMUP_PERIOD์—์„œ ๋ฌด์—‡์ด ๋‹ค๋ฅธ๊ฐ€

  • diff ๊ธฐ๋ฐ˜ ๊ฒ€์‚ฌ (์–ด์ œ ๋น„๊ต๊ฐ€ ํ•„์š”ํ•œ ๊ฒ€์‚ฌ)์˜ HIGH/MEDIUM ๋ฐœ๊ฒฌ์„ INFO๋กœ ๊ฒฉํ•˜
  • detail ์•ž์— [warmup] ์ ‘๋‘์‚ฌ ํ‘œ์‹œ
  • SUMMARY์— WARMUP_PERIOD ํƒœ๊ทธ ํ‘œ์‹œ
  • HTML ๋ฆฌํฌํŠธ ์ƒ๋‹จ์— ์•ˆ๋‚ด ๋ฐฐ๋„ˆ ํ‘œ์‹œ

๋‹จ, ๋‹ค์Œ ๊ฒ€์‚ฌ๋Š” ๊ฒฉํ•˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค

๋น„๊ต๊ฐ€ ํ•„์š” ์—†๋Š” ๊ฒ€์‚ฌ (๋‹จ์ˆœ ์กด์žฌ ์—ฌ๋ถ€, ํŒŒ์ผ mtime ๋“ฑ)๋Š” ์ฒซ๋‚ ๋ถ€ํ„ฐ ์ •์ƒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

  • UID 0 ๋น„root ๊ณ„์ •, ๋นˆ ํŒจ์Šค์›Œ๋“œ (10)
  • /etc/ld.so.preload ์กด์žฌ (15)
  • ์ž„์‹œ ๋””๋ ‰ํ† ๋ฆฌ ์‹คํ–‰ ํ”„๋กœ์„ธ์Šค (13)
  • ๋กœ๊ทธ 0๋ฐ”์ดํŠธ/์‹ฌ๋ณผ๋ฆญ๋งํฌ (18)
  • ์›น์‰˜ ํŒจํ„ด ๋งค์นญ (17)
  • ClamAV ์‹œ๊ทธ๋‹ˆ์ฒ˜ ๋งค์นญ (24)

์ฆ‰, WARMUP_PERIOD ์ค‘์—๋„ ๊ฐ€์žฅ ๊ฒฐ์ •์ ์ธ ์นจํ•ด ํ”์ ์€ ๊ทธ๋Œ€๋กœ ์žกํž™๋‹ˆ๋‹ค.

์šด์˜์ž๊ฐ€ ํ•  ์ผ

  • ์ฒซ 8์ผ ๋™์•ˆ SUMMARY์— WARMUP_PERIOD ํƒœ๊ทธ๊ฐ€ ๋ณด์ด๋ฉด ์ •์ƒ
  • 8์ผ์ด ์ง€๋‚˜๋ฉด ์ž๋™์œผ๋กœ ์‚ฌ๋ผ์ง
  • 8์ผ์ด ์ง€๋‚ฌ๋Š”๋ฐ ๊ณ„์† ๋ณด์ด๋ฉด output/ ๋””๋ ‰ํ† ๋ฆฌ ์ˆ˜ ํ™•์ธ (ls output/ | grep -c '^20'์ด 8 ์ด์ƒ์ด์–ด์•ผ)

13. HIGH ๋ฐœ๊ฒฌ ์‹œ ๋Œ€์‘

STATUS:WARN(MEDIUM๋งŒ ๋ฐœ๊ฒฌ)์ผ ๋•Œ: ์ฆ‰์‹œ ๊ฒฉ๋ฆฌ ๋‹จ๊ณ„๊นŒ์ง€ ๊ฐˆ ์ผ์€ ๋“œ๋ฌผ์ง€๋งŒ, ์–ด๋–ค ๊ฒ€์‚ฌ๊ฐ€ ์žกํ˜”๋Š”์ง€ ๋ณด๊ณ  ์ •์ƒ ๋ณ€๊ฒฝ์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. result.json์—์„œ MEDIUM ํ•ญ๋ชฉ๋งŒ ์ถ”์ถœํ•ด ์šด์˜ํŒ€์ด ์ธ์ง€ํ•˜๋Š” ๋ณ€๊ฒฝ์ธ์ง€ ํ™•์ธ โ†’ ๋ชจ๋ฅด๋Š” ๋ณ€๊ฒฝ์ด๋ฉด ์•„๋ž˜ SOP์— ์ค€ํ•ด์„œ ๋Œ€์‘. ์ต์ˆ™ํ•ด์ง„ ๋ฐ˜๋ณต MEDIUM(์˜ˆ: ์ปจํ…Œ์ด๋„ˆ sudoers์˜ ์šด์˜์ž NOPASSWD ๋ผ์ธ)์€ ๋ฌด์‹œํ•ด๋„ ์ข‹์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ๊ฐ™์€ MEDIUM์ด ๋งค์ผ ๊ณ„์† ๋ณด์ด๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ MEDIUM์ด๋ผ๋ฉด ํ•œ ๋ฒˆ ํ™•์ธํ•˜๋Š” ๊ฒŒ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.

13-1. ์šด์˜ ์‹œ๋‚˜๋ฆฌ์˜ค (์–ด๋А ๋‚  ALERT๊ฐ€ ๋–ด๋‹ค)

ํ™”์š”์ผ ์•„์นจ 9์‹œ. ์šด์˜์ž๊ฐ€ ๋งค์ผ ํ•˜๋Š” ํ•œ ์ค„ ์ ๊ฒ€์„ ์‹คํ–‰ํ•œ๋‹ค.

$ ssh web01 'cat /opt/secchk/output/latest/SUMMARY.txt'
[2026-05-30 03:30:12] HIGH:2 MEDIUM:3 LOW:0 INFO:6 ERROR:0 ELAPSED:8s STATUS:ALERT HOST:web01 MODE:daily

STATUS:ALERT. ์–ด์ œ๊นŒ์ง€ ๋ฉฐ์น ์งธ CLEAN์ด์—ˆ๋Š”๋ฐ ์˜ค๋Š˜ ์ฒ˜์Œ ๋–ด๋‹ค. ์šด์˜์ž๋Š” ๋‹ค์Œ ๋ช…๋ น์œผ๋กœ ๋ฌด์—‡์ด ์žกํ˜”๋Š”์ง€ ๋ณธ๋‹ค.

$ ssh web01 'cat /opt/secchk/output/latest/diff_from_yesterday.txt'
# diff_from_yesterday โ€” 20260529 vs 20260530

## "+" ์˜ค๋Š˜ ์ƒˆ ๋ฐœ๊ฒฌ (๊ฐ€์žฅ ์ค‘์š”):
+ 16_ssh_auth|HIGH|new_ssh_key|์‹ ๊ทœ SSH authorized_key โ€” ์žฌ์ ‘์† ๋ฐฑ๋„์–ด ์˜์‹ฌ
+ 15_persistence|HIGH|ld_preload_file|/etc/ld.so.preload ์กด์žฌ โ€” ์‹œ์Šคํ…œ ์ „์—ญ LD_PRELOAD ๋ฃจํŠธํ‚ท ์˜์‹ฌ

"์‹ ๊ทœ SSH ํ‚ค"์™€ "ld.so.preload"๊ฐ€ ๋™์‹œ์—. ์ •์ƒ ์šด์˜์—์„œ ์ด๋Ÿฐ ๋ณ€๊ฒฝ์„ ํ•œ ์‚ฌ๋žŒ์ด ์—†๋Š”๋ฐ. ์šด์˜์ž๋Š” ์ฆ‰์‹œ ๋‹ค์Œ SOP๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค.

13-2. ํŒ๋‹จ ๊ฒฐ์ • ํŠธ๋ฆฌ

HIGH๊ฐ€ ๋–ด๋‹ค
    โ”‚
    โ–ผ
์–ด๋–ค ๊ฒ€์‚ฌ์ธ๊ฐ€? (diff_from_yesterday.txt์˜ "+" ํ•ญ๋ชฉ)
    โ”‚
    โ”œโ”€ ์šด์˜ํŒ€์ด "๋‚ด๊ฐ€ ํ•œ ์ผ"์ด๋ผ๊ณ  ํ™•์ธ โ†’ ์ •์ƒ ๋ณ€๊ฒฝ
    โ”‚       โ”‚
    โ”‚       โ–ผ
    โ”‚   ์šด์˜ ๊ธฐ๋ก์— ๋ณด๊ด€ (๋‹ค์Œ๋ถ€ํ„ฐ๋Š” ์ต์ˆ™ํ•œ ๋ณ€๊ฒฝ)
    โ”‚
    โ””โ”€ ์•„๋ฌด๋„ ๋ชจ๋ฅธ๋‹ค โ†’ ์นจํ•ด ๊ฐ€๋Šฅ์„ฑ
            โ”‚
            โ–ผ
        13-3์˜ 4๋‹จ๊ณ„ SOP ์‹œ์ž‘

13-3. 4๋‹จ๊ณ„ SOP

1๋‹จ๊ณ„: ์ฆ๊ฑฐ ๋ณด์กด (๊ฐ€์žฅ ๋จผ์ €)

# ๊ฒฐ๊ณผ ๋””๋ ‰ํ† ๋ฆฌ ์ „์ฒด๋ฅผ ๋ณ„๋„ ์œ„์น˜์— ๋ณด์กด
sudo tar czf /tmp/secchk-$(hostname)-$(date +%Y%m%d-%H%M).tgz /opt/secchk/output/
# ๊ฐ€๋Šฅํ•˜๋ฉด USB๋‚˜ ๋‹ค๋ฅธ ์„œ๋ฒ„๋กœ ์ฆ‰์‹œ ๋ณต์‚ฌ (๊ณต๊ฒฉ์ž๊ฐ€ ์ถ”๊ฐ€ ์ฒญ์†Œํ•˜๊ธฐ ์ „์—)

์ถ”๊ฐ€ ๋ณด์กด:

  • ๋ฉ”๋ชจ๋ฆฌ dump (๊ฐ€๋Šฅํ•˜๋ฉด, ๋ณ„๋„ ๋„๊ตฌ ํ•„์š”)
  • ์˜์‹ฌ ํ”„๋กœ์„ธ์Šค์˜ /proc/<pid>/exe, /proc/<pid>/maps, /proc/<pid>/cmdline
  • ํ˜„์žฌ LISTEN ํฌํŠธ ์ƒํƒœ: ss -tnlp > /tmp/ss-snapshot.txt

2๋‹จ๊ณ„: ๊ฒฉ๋ฆฌ ํŒ๋‹จ

์ƒํ™ฉ ํŒ๋‹จ
HIGH๊ฐ€ 13_process(๋ฃจํŠธํ‚ท) ๋˜๋Š” 15_persistence(ld.so.preload) ์ฆ‰์‹œ ๋„คํŠธ์›Œํฌ ๊ฒฉ๋ฆฌ ๊ฒ€ํ† 
HIGH๊ฐ€ 16_ssh_auth(์‹ ๊ทœ SSH ํ‚ค)๋งŒ ๋‹จ๋… SSH ํ‚ค ์ฆ‰์‹œ ์ œ๊ฑฐ + ์‚ฌ์šฉ์ž ํŒจ์Šค์›Œ๋“œ ์žฌ๋ฐœ๊ธ‰, ๊ฒฉ๋ฆฌ๋Š” ์ถ”๊ฐ€ ์‹ ํ˜ธ ๋ณด๊ณ  ๊ฒฐ์ •
HIGH๊ฐ€ 17_webshell ์›น ์„œ๋น„์Šค ์ผ์‹œ ์ค‘์ง€ + ์›น์‰˜ ํŒŒ์ผ ๊ฒฉ๋ฆฌ, ๋ฐฑ์—”๋“œ๋Š” ์œ ์ง€
HIGH๊ฐ€ 21_network_config(DNS/CA ๋ณ€์กฐ) ์ฆ‰์‹œ ๊ฒฉ๋ฆฌ, MITM ์ธํ”„๋ผ ์™„์„ฑ๋์„ ๊ฐ€๋Šฅ์„ฑ

3๋‹จ๊ณ„: ์•Œ๋ฆผ

  • ๋ณด์•ˆํŒ€, ์šด์˜ํŒ€, ์ฑ…์ž„์ž (์‚ฌ๋‚ด ๋ณด์•ˆ์‚ฌ๊ณ  ๋ณด๊ณ  ์ฒด๊ณ„์— ๋”ฐ๋ผ)
  • ๋ณด๊ณ ์— ํฌํ•จํ•  ์ •๋ณด:
    • ํ˜ธ์ŠคํŠธ๋ช…, ๋ฐœ๊ฒฌ ์‹œ๊ฐ, ์ ๊ฒ€ ์‹œ๊ฐ
    • HIGH ํ•ญ๋ชฉ ๋ชฉ๋ก (grep '"severity":"HIGH"' result.json)
    • ๋ณด์กดํ•œ ์ฆ๊ฑฐ ํŒŒ์ผ ์œ„์น˜
    • ์ถ”์ • ์นจํ•ด ์‹œ์  (๊ด€๋ จ ํŒŒ์ผ์˜ mtime)

4๋‹จ๊ณ„: ํฌ๋ Œ์‹ (๋ณ„๋„ ์ ˆ์ฐจ)

secchk ์˜ ๋ฒ”์œ„ ๋ฐ–. ์‚ฌ๋‚ด ๋ณด์•ˆํŒ€ ๋˜๋Š” ์™ธ๋ถ€ ์ „๋ฌธ ์ธ๋ ฅ์— ์ธ๊ณ„.

์ž๋™ ์ž๊ฐ€๋ณต๊ตฌ๋ฅผ ํ•˜์ง€ ์•Š๋Š” ์ด์œ 

์ด ์Šคํฌ๋ฆฝํŠธ๋Š” ๋ฐœ๊ฒฌํ•œ ์นจํ•ด ํ”์ ์„ ์ž๋™์œผ๋กœ ์ œ๊ฑฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์ด์œ  ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

  • ์ž๋™ ์ œ๊ฑฐ๋Š” ์ฆ๊ฑฐ๋ฅผ ๊ฐ™์ด ์—†์•ฑ๋‹ˆ๋‹ค. ์นจํ•ด ์‹œ์  ์ถ”์ •, ์นจํˆฌ ๊ฒฝ๋กœ ๋ถ„์„์ด ๋ถˆ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.
  • ๊ณต๊ฒฉ์ž์˜ ๋‹ค๋ฅธ ์ž”์กด ๋ฐฑ๋„์–ด๋ฅผ ๋†“์น˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • ์ž๋™ ์ œ๊ฑฐ ์ž์ฒด๊ฐ€ ์šด์˜ ์žฅ์• ๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (์ •์ƒ ๋ณ€๊ฒฝ์ด์—ˆ๋‹ค๋ฉด).

๋ณต๊ตฌ๋Š” ์‚ฌ๋žŒ์ด ์ฆ๊ฑฐ๋ฅผ ๋ณธ ํ›„ ํŒ๋‹จํ•˜๋Š” ์ ˆ์ฐจ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.


14. ์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ (FAQ)

Q1. ClamAV ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ์–ด๋””์„œ ๋ฐ›๋‚˜์š”?

8. ClamAV ์‹œ๊ทธ๋‹ˆ์ฒ˜ USB ๋ฐ˜์ž… ์ ˆ์ฐจ ์ฐธ์กฐ. ์™ธ๋ถ€ ์ธํ„ฐ๋„ท์ด ๊ฐ€๋Šฅํ•œ PC์—์„œ freshclam ๋ช…๋ น์œผ๋กœ ๋ฐ›์•„ USB๋กœ ๋ฐ˜์ž…ํ•ฉ๋‹ˆ๋‹ค.

Q2. WARMUP_PERIOD๊ฐ€ ๊ณ„์† ํ‘œ์‹œ๋ผ์š”

output/ ๋””๋ ‰ํ† ๋ฆฌ ์ˆ˜๊ฐ€ 8๊ฐœ ๋ฏธ๋งŒ์ด๋ฉด WARMUP์ด ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

ls /opt/secchk/output/ | grep -c '^20'

8 ์ด์ƒ์ด์–ด์•ผ ์ •์ƒ ๋ชจ๋“œ ์ง„์ž…. ๋งŒ์•ฝ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์ถฉ๋ถ„ํ•œ๋ฐ๋„ WARMUP์ด ๋œจ๋ฉด retention ์ •์ฑ…์œผ๋กœ ์‚ญ์ œ๋์„ ๊ฐ€๋Šฅ์„ฑ (KEEP_DAYS ํ™•์ธ).

Q3. ์ฒซ ๋„์ž… ์‹œ ๊ฑฐ์ง“์–‘์„ฑ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„์š”

์šด์˜ ํ™˜๊ฒฝ๋งˆ๋‹ค ์ •์ƒ ํ•ญ๋ชฉ์ด ๋‹ค๋ฅด๋ฏ€๋กœ ์ฒซ 1~2์ฃผ๋Š” ์ •๋น„ ๊ธฐ๊ฐ„์ž…๋‹ˆ๋‹ค.

  • ์ •์ƒ ์‹ ๊ทœ LISTEN ํฌํŠธ๊ฐ€ ์žˆ๋‹ค๋ฉด: ์šด์˜ ๊ธฐ๋ก์— ๋‚จ๊ธฐ๊ณ , ์ถ”ํ›„ ์•Œ๋žŒ์ด ์˜๋ฏธ ์žˆ๋Š”์ง€ ๊ฒ€ํ† 
  • /etc/sudoers๊ฐ€ ๋งค๋ฒˆ ์žกํž˜: ์šด์˜์ž๊ฐ€ ์ˆ˜์ •ํ•œ ํ”์ . ์ •์ƒ์ด๋ฉด ๋ฌด์‹œ (๋ฐ˜๋ณต ์•Œ๋žŒ์ด์ง€๋งŒ ์นจํ•ด๋Š” ์•„๋‹˜)
  • ๋ณดํ†ต 1์ฃผ์ฐจ์— ์ต์ˆ™ํ•ด์ง€๋ฉด ๊ฑฐ์ง“์–‘์„ฑ ํŒจํ„ด์ด ์•ˆ์ •ํ™”๋จ

Q4. ๋””์Šคํฌ ๋ถ€์กฑ์œผ๋กœ abort ๋์–ด์š”

secchk: ๋””์Šคํฌ ์—ฌ์œ  ๋ถ€์กฑ (512MB < 1024MB), /opt/secchk โ€” ์ค‘๋‹จ

MIN_FREE_MB ๋ฏธ๋งŒ์ด๋ฉด ์ ๊ฒ€์„ ์‹œ์ž‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์ ๊ฒ€ ๊ฒฐ๊ณผ๋กœ ๋””์Šคํฌ๊ฐ€ ๊ฐ€๋“ ์ฐจ๋Š” ์‚ฌ๊ณ  ๋ฐฉ์ง€). ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋กœ ๋Œ€์‘:

  • ๋””์Šคํฌ ์ •๋ฆฌ (ํŠนํžˆ /var/log ์™€ output/ ์•ˆ์˜ ์˜ค๋ž˜๋œ ALERT ๋””๋ ‰ํ† ๋ฆฌ)
  • secchk.conf์—์„œ KEEP_DAYS๋ฅผ ์ค„์—ฌ ์ž๋™ ์ •๋ฆฌ๋Ÿ‰ ๋Š˜๋ฆฌ๊ธฐ
  • MIN_FREE_MB๋ฅผ ๋‚ฎ์ถ”๊ธฐ (์œ„ํ—˜. ๋ณดํ˜ธ ์˜๋„ ์•ฝํ™”)

Q5. ์ ๊ฒ€ ์ค‘ ์šด์˜ ์„œ๋น„์Šค์— ์˜ํ–ฅ์ด ์žˆ๋‚˜์š”?

๋‹ค์Œ ๋ถ€ํ•˜ ์ œ์–ด๊ฐ€ ์ด๋ฏธ ์ ์šฉ๋˜์–ด ์˜ํ–ฅ์„ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.

  • nice -n 19 ionice -c3 idle โ€” ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ์–‘๋ณด
  • ulimit -v 1500000 โ€” ๋ฉ”๋ชจ๋ฆฌ 1.5GB ์ƒํ•œ (ClamAV ๋ณดํ˜ธ)
  • --throttle 0.1 โ€” ๊ฒ€์‚ฌ ์‚ฌ์ด 0.1์ดˆ sleep
  • ํ•ซ์ŠคํŒŸ ๋งค์ผ + ์ฝœ๋“œ ์š”์ผ๋ณ„ ๋ถ„ํ•  โ€” ๋””์Šคํฌ ์ ๊ฒ€ ๋ถ€ํ•˜ 1/7๋กœ ๋ถ„์‚ฐ
  • ๋ชจ๋“ˆ๋ณ„ timeout 60s, ClamAV timeout 3600s โ€” hang ๋ฐฉ์ง€

์ƒˆ๋ฒฝ ์‹œ๊ฐ„๋Œ€(03:30) ์‹คํ–‰์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

Q6. cron์ด ๊ฐ™์€ ์‹œ๊ฐ์— ๊ฒน์ณ ๋„๋Š” ๊ฒŒ ๊ฑฑ์ •๋ฉ๋‹ˆ๋‹ค

๊ฐ™์€ ํ˜ธ์ŠคํŠธ์—์„œ ๋™์‹œ ์‹คํ–‰์€ flock์œผ๋กœ 1๊ฐœ๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค (exit 30). ์ด์ „ ์‹คํ–‰์ด ๋๋‚˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ์ƒˆ cron์ด ๋Œ๋ฉด ์ƒˆ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ฆ‰์‹œ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ์ •์ƒ ๋™์ž‘์ž…๋‹ˆ๋‹ค.

Q7. ClamAV ์•ˆ ์“ฐ๊ณ  ์‹ถ์–ด์š”

cron ๋ผ์ธ์— --no-clamav ์˜ต์…˜ ์ถ”๊ฐ€.

30 3 * * * root /opt/secchk/secchk.sh --mode daily --no-clamav >/dev/null 2>&1

๋‹ค๋ฅธ 16๊ฐœ ๋ชจ๋“ˆ์€ ๊ทธ๋Œ€๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

Q8. ์ผ์š”์ผ ์ƒˆ๋ฒฝ ์ฝœ๋“œ ์˜์—ญ๋งŒ ๋„ˆ๋ฌด ํฐ ๊ฒƒ ๊ฐ™์•„์š”

secchk.conf์˜ ROTATE_<์š”์ผ> ๋ถ„๋ฐฐ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์กฐ์ •ํ•˜์„ธ์š”. ์˜ˆ๋ฅผ ๋“ค์–ด ์ผ์š”์ผ์˜ /var/lib์ด ํฌ๋ฉด ํ† ์š”์ผ๊ณผ ๋‚˜๋ˆ„๊ฑฐ๋‚˜ ํ‰์ผ๋กœ ์˜ฎ๊ธฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

Q9. HTML ๋ฆฌํฌํŠธ์— ์™ธ๋ถ€ ์ž์›(CSS/JS) ์˜์กด์„ฑ์ด ์—†๋‚˜์š”?

์—†์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  CSS๋Š” ์ธ๋ผ์ธ์ด๋ฉฐ JavaScript๋„ ์—†์Šต๋‹ˆ๋‹ค. ์˜คํ”„๋ผ์ธ ํ™˜๊ฒฝ์—์„œ๋„ ๊ทธ๋Œ€๋กœ ์—ด๋ฆฝ๋‹ˆ๋‹ค.


15. ์ด ์Šคํฌ๋ฆฝํŠธ์˜ ํ•œ๊ณ„์™€ ๋ณด์™„ ๋ฐฉ๋ฒ•

ํ•œ๊ณ„ ๋ณด์™„ ๋ฐฉ๋ฒ• (๊ฐ„๋žต)
๋งค์ผ 1ํšŒ ์ ๊ฒ€์ด๋ผ ๊ทธ ์‚ฌ์ด ๋ฐœ์ƒํ–ˆ๋‹ค๊ฐ€ ์‚ฌ๋ผ์ง„ ์งง์€ ๊ณต๊ฒฉ์€ ๋†“์นจ cron ์ฃผ๊ธฐ๋ฅผ ์‹œ๊ฐ„ ๋‹จ์œ„๋กœ ์ขํžˆ๊ฑฐ๋‚˜, ์ ๊ฒ€ ์‹œ๊ฐ์— ๋ฌด์ž‘์œ„ ์ง€์—ฐ (sleep $((RANDOM%600)))์œผ๋กœ ๊ณต๊ฒฉ์ž์˜ ์‹œ๊ฐ ์˜ˆ์ธก ์–ด๋ ต๊ฒŒ
๊ด€๋ฆฌ์ž ๊ถŒํ•œ ๊ณต๊ฒฉ์ž๋Š” ์ ๊ฒ€ ๊ฒฐ๊ณผ ์ž์ฒด๋ฅผ ์œ„์กฐํ•  ์ˆ˜ ์žˆ์Œ chattr +i๋กœ ์ผ๋ถ€ ์ง€์—ฐ ํšจ๊ณผ. ์™„์ „ ๋ณดํ˜ธ๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋ณ„๋„ ์‹œ์Šคํ…œ์œผ๋กœ ์™ธ๋ถ€ ์ „๋‹ฌํ•ด์•ผ ๊ฐ€๋Šฅ (secchk ๋ฒ”์œ„ ๋ฐ–)
์•Œ๋ ค์ง„ ์•…์„ฑ์ฝ”๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜ ๊ฐฑ์‹ ์ด USB ๋ฐ˜์ž… ์ฃผ๊ธฐ๋งŒํผ ๋Šฆ์Œ ์‹œ๊ทธ๋‹ˆ์ฒ˜ 30์ผ ์ดˆ๊ณผ ์‹œ ์ž๋™ MEDIUM ๊ฒฝ๊ณ  ํ‘œ์‹œ. ์šด์˜์ž๊ฐ€ ๋ฐ˜์ž… ์ฃผ๊ธฐ๋ฅผ ๋‹จ์ถ•
์นจํ•ด๋ฅผ ์ฐจ๋‹จํ•˜์ง€ ์•Š๊ณ  ๋ณด๊ณ ๋งŒ ํ•จ HIGH ๋ฐœ๊ฒฌ ์‹œ ์šด์˜์ž๊ฐ€ SOP์— ๋”ฐ๋ผ ์ˆ˜๋™ ๋Œ€์‘ (13. HIGH ๋ฐœ๊ฒฌ ์‹œ ๋Œ€์‘)
๊ณต๊ฒฉ์ž๊ฐ€ ์ ๊ฒ€ ์‹œ๊ฐ์„ ์•Œ๋ฉด ์ •์ƒ ๋ณต์› โ†’ ์ ๊ฒ€ ํ†ต๊ณผ โ†’ ์žฌ์นจํ•ด ๊ฐ€๋Šฅ /etc/cron.d/secchk ๊ถŒํ•œ์„ 600์œผ๋กœ ์ œํ•œ + ์ ๊ฒ€ ์‹œ๊ฐ์— ๋ฌด์ž‘์œ„ ์ง€์—ฐ
์‹ ์ข…/๋งž์ถค ์•…์„ฑ์ฝ”๋“œ๋Š” ์‹œ๊ทธ๋‹ˆ์ฒ˜๊ฐ€ ์—†์–ด ๋ชป ์žก์Œ ์ด ์Šคํฌ๋ฆฝํŠธ์˜ ํ–‰์œ„ ๊ธฐ๋ฐ˜ ๊ฒ€์‚ฌ(13/15/14)๊ฐ€ ๋ณด๊ฐ•. ์‹œ๊ทธ๋‹ˆ์ฒ˜ ์˜์กด ์˜์—ญ์€ ClamAV 1๊ฐœ ๋ชจ๋“ˆ๋กœ ํ•œ์ •

์ด ์Šคํฌ๋ฆฝํŠธ๋Š” ์œ„ ํ•œ๊ณ„๋ฅผ ์•ˆ๊ณ  ์žˆ๋Š” ์ •๊ธฐ ์ ๊ฒ€ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ํ•œ๊ณ„๋ฅผ ์ธ์ง€ํ•˜๊ณ  ์šด์˜ํ•˜๋ฉด ์ถฉ๋ถ„ํžˆ ์‹ค์šฉ์ ์ธ ๊ฐ€์‹œ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.


16. ๋นŒ๋“œ / ๊ฐœ๋ฐœ์ž ๊ฐ€์ด๋“œ

์†Œ์Šค ๊ตฌ์กฐ

linux_sec/
โ”œโ”€โ”€ build.sh                โ† src/*.sh ๋ฅผ ๋ฒˆํ˜ธ ์ˆœ์„œ๋กœ cat โ†’ secchk.sh ์ƒ์„ฑ
โ”œโ”€โ”€ secchk.sh               โ† ๋ฐฐํฌ ์‚ฐ์ถœ๋ฌผ (build.sh ๊ฐ€ ์ƒ์„ฑ, git ์—๋„ ์ปค๋ฐ‹)
โ”œโ”€โ”€ src/
โ”‚   โ”œโ”€โ”€ 00_header.sh        โ† ์ „์—ญ ๋ณ€์ˆ˜, PATH/alias ๊ฐ•์ œ ์ดˆ๊ธฐํ™”
โ”‚   โ”œโ”€โ”€ 01_args.sh          โ† ์ธ์ž ํŒŒ์‹ฑ
โ”‚   โ”œโ”€โ”€ 02_common.sh        โ† ๋กœ๊น…/JSON/throttle/state/๋ชจ๋“ˆ ๊ฒฉ๋ฆฌ ํ—ฌํผ
โ”‚   โ”œโ”€โ”€ 03_os_detect.sh     โ† OS ์ž๋™ ๊ฐ์ง€ + ์„ค์ • ๋กœ๋“œ
โ”‚   โ”œโ”€โ”€ 04_lock_resource.sh โ† flock/nice/ionice/ulimit/๋””์Šคํฌ ๊ฒ€์‚ฌ/์ถœ๋ ฅ ์ค€๋น„
โ”‚   โ”œโ”€โ”€ 10_account.sh ~ 25_rkhunter.sh   โ† ์ ๊ฒ€ ๋ชจ๋“ˆ 16๊ฐœ
โ”‚   โ”œโ”€โ”€ 89_dispatch.sh      โ† ๋ชจ๋“œ๋ณ„ ๋ชจ๋“ˆ ํ˜ธ์ถœ (run_checks)
โ”‚   โ”œโ”€โ”€ 90_report.sh        โ† SUMMARY/HTML/diff/latest/chattr/retention
โ”‚   โ””โ”€โ”€ 99_footer.sh        โ† main() ์ง„์ž…์  + ์ข…๋ฃŒ ์ฝ”๋“œ

๋นŒ๋“œ

./build.sh

๋‹ค์Œ์„ ์ž๋™ ์ˆ˜ํ–‰:

  1. src/[0-9][0-9]_*.sh๋ฅผ ๋ฒˆํ˜ธ ์ˆœ์„œ๋Œ€๋กœ ์ฝ์Œ
  2. 00_header.sh์˜ shebang๋งŒ ์œ ์ง€ํ•˜๊ณ  ๋‚˜๋จธ์ง€ ๋ชจ๋“ˆ์€ shebang ์ œ๊ฑฐ
  3. ํ•˜๋‚˜์˜ secchk.sh๋กœ ํ•ฉ์นจ
  4. bash -n์œผ๋กœ ๋ฌธ๋ฒ• ๊ฒ€์‚ฌ
  5. shellcheck๊ฐ€ ์„ค์น˜๋ผ ์žˆ์œผ๋ฉด ์ •์  ๋ถ„์„

์ƒˆ ์ ๊ฒ€ ๋ชจ๋“ˆ ์ถ”๊ฐ€

  1. src/26_my_check.sh ์ƒ์„ฑ
  2. mod_26_my_check() ํ•จ์ˆ˜ ์ •์˜ (๋งˆ์ง€๋ง‰์— return 0 ๋ช…์‹œ)
  3. src/89_dispatch.sh์˜ run_checks()์— _run_if_defined mod_26_my_check '26_my_check' ์ถ”๊ฐ€
  4. ./build.sh ์‹คํ–‰

๊ฐ ๋ชจ๋“ˆ์€ ๋‹ค์Œ ํ—ฌํผ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ:

  • log_finding <module> <check> <severity> <detail> [evidence] [diff_based]
  • state_save <module> <key> (stdin โ†’ ์˜ค๋Š˜ state ํŒŒ์ผ)
  • state_yesterday_path <module> <key> (์–ด์ œ state ๊ฒฝ๋กœ)
  • is_private_ip <ip> (RFC1918 + ๋ฃจํ”„๋ฐฑ)
  • have_cmd <๋ช…๋ น>
  • mk_tmp (cleanup ์ž๋™ ์ถ”์ )
  • throttle_sleep

์ •์  ๋ถ„์„

sudo apt install -y shellcheck   # ๋˜๋Š” dnf install -y ShellCheck
./build.sh   # ๋นŒ๋“œ ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„์—์„œ shellcheck ์ž๋™ ์‹คํ–‰

๋นŒ๋“œ ์‚ฐ์ถœ๋ฌผ ๊ฒ€์ฆ

./build.sh
sudo ./secchk.sh --mode daily

exit 1 (HIGH ๋ฐœ๊ฒฌ ์‹œ) ๋˜๋Š” 0 (CLEAN) ๋˜๋Š” 2 (MEDIUM๋งŒ)๊ฐ€ ์ •์ƒ.

CLI ์˜ต์…˜ ํ•œ๋ˆˆ์—

์˜ต์…˜ ์ธ์ž ๊ธฐ๋ณธ๊ฐ’ ์„ค๋ช…
--os auto | rhel | debian auto OS ๊ณ„์—ด ์ง€์ •. auto ๋Š” /etc/os-release ๋กœ ๊ฐ์ง€. ๊ฐ์ง€ ์‹คํŒจ ์‹œ ์ˆ˜๋™ ์ง€์ •
--mode daily | full daily ์ ๊ฒ€ ๋ฒ”์œ„. full ์€ ์ฝœ๋“œ ์˜์—ญ ์ „์ฒด (์ˆ˜๋™ ์ ๊ฒ€ ์‹œ)
--throttle ์ˆซ์ž(์ดˆ) 0.1 ์ ๊ฒ€ ํ•ญ๋ชฉ ์‚ฌ์ด sleep. 0 ์œผ๋กœ ๋„๊ฑฐ๋‚˜ 0.2 ๋กœ ๋” ๋ถ„์‚ฐ
--no-clamav (๋ถˆ๋ฆฌ์–ธ ํ”Œ๋ž˜๊ทธ) OFF ClamAV ์ ๊ฒ€ ๋น„ํ™œ์„ฑ (๊ธฐ๋ณธ์€ ํ™œ์„ฑ)
--with-rkhunter (๋ถˆ๋ฆฌ์–ธ ํ”Œ๋ž˜๊ทธ) OFF rkhunter ์ ๊ฒ€ ํ™œ์„ฑ (๊ธฐ๋ณธ์€ ๋น„ํ™œ์„ฑ)
--rotate-day auto | mon..sun auto ์ฝœ๋“œ ์˜์—ญ ์š”์ผ ๊ฐ•์ œ. auto ๋Š” ์˜ค๋Š˜ ์š”์ผ
--config ๊ฒฝ๋กœ (์ž๋™ ํƒ์ƒ‰) ์„ค์ • ํŒŒ์ผ ๊ฒฝ๋กœ ๋ช…์‹œ. ์—†์œผ๋ฉด /etc/secchk.conf โ†’ ์Šคํฌ๋ฆฝํŠธ ๋””๋ ‰ํ† ๋ฆฌ โ†’ ๋‚ด์žฅ ๊ธฐ๋ณธ๊ฐ’ ์ˆœ์œผ๋กœ ํƒ์ƒ‰
-h, --help โ€” โ€” ๋„์›€๋ง ์ถœ๋ ฅ ํ›„ ์ข…๋ฃŒ
-V, --version โ€” โ€” ๋ฒ„์ „ ์ถœ๋ ฅ ํ›„ ์ข…๋ฃŒ

์ข…๋ฃŒ ์ฝ”๋“œ ํ•œ๋ˆˆ์—

์ฝ”๋“œ ์˜๋ฏธ cron ๋™์ž‘
0 CLEAN โ€” HIGH ์™€ MEDIUM ๋ชจ๋‘ 0 ์ •์ƒ
1 ALERT โ€” HIGH 1๊ฑด ์ด์ƒ ์ •์ƒ (์šด์˜์ž๊ฐ€ ์ฆ‰์‹œ ํ™•์ธ)
2 WARN โ€” MEDIUM ๋งŒ (HIGH ๋Š” 0) ์ •์ƒ (์šด์˜์ž ๊ฒ€ํ†  ๊ถŒ์žฅ)
10 ๋ชจ๋“ˆ ์‹คํ–‰ ์‹คํŒจ (timeout, command not found ๋“ฑ ์ธํ”„๋ผ ๋ฌธ์ œ) ์ •์ƒ (๊ฐ€์‹œ์„ฑ ๋ชฉ์ )
20 ์„ค์ • ์˜ค๋ฅ˜ (์ธ์ž ์˜ค๋ฅ˜, conf ํŒŒ์‹ฑ ์‹คํŒจ, ๋””์Šคํฌ ๋ถ€์กฑ) ์šด์˜์ž ์ˆ˜์ • ํ•„์š”
30 lock ํš๋“ ์‹คํŒจ (์ด์ „ ์ธ์Šคํ„ด์Šค ์ง„ํ–‰ ์ค‘) ์ •์ƒ (๋‹ค์Œ cron ์—์„œ ์žฌ์‹œ๋„)

17. ํด๋” / ํŒŒ์ผ ๋ ˆ์ด์•„์›ƒ

๋ฐฐํฌ ์‹œ ์šด์˜์ž๊ฐ€ ์„œ๋ฒ„์— ๋‘๋Š” ํŒŒ์ผ๋“ค:

/opt/secchk/
โ”œโ”€โ”€ secchk.sh                       (์‹คํ–‰๊ถŒํ•œ 700, root:root)
โ””โ”€โ”€ patterns/
    โ”œโ”€โ”€ webshell_regex.txt          (์Šคํฌ๋ฆฝํŠธ ๋‚ด์žฅ ํŒจํ„ด)
    โ””โ”€โ”€ custom_iocs/                (์šด์˜์ž ์ž์œจ, ๋น„์–ด๋„ OK)

/etc/secchk.conf                    (๊ถŒํ•œ 600, root:root)
/etc/cron.d/secchk                  (๊ถŒํ•œ 600, root:root)
/var/lib/clamav/main.cvd            (ClamAV ์‚ฌ์šฉ ์‹œ)
/var/lib/clamav/daily.cvd
/var/lib/clamav/bytecode.cvd
/var/run/secchk.lock                (์ž๋™ ์ƒ์„ฑ, flock ์šฉ)

์šด์˜ ์‹œ ์ž๋™ ์ƒ์„ฑ๋˜๋Š” ๊ฒฐ๊ณผ:

/opt/secchk/output/
โ”œโ”€โ”€ latest โ†’ 20260530/              (์‹ฌ๋ณผ๋ฆญ๋งํฌ)
โ”œโ”€โ”€ SUMMARY_INDEX.txt
โ””โ”€โ”€ YYYYMMDD/                       (์ผ์ž๋ณ„ ๋””๋ ‰ํ† ๋ฆฌ)
    โ”œโ”€โ”€ SUMMARY.txt
    โ”œโ”€โ”€ result.json
    โ”œโ”€โ”€ report.html
    โ”œโ”€โ”€ full.log
    โ”œโ”€โ”€ diff_from_yesterday.txt
    โ”œโ”€โ”€ .preserved                  (HIGH ๋ฐœ๊ฒฌ ์‹œ ์ž๋™ ์ƒ์„ฑ)
    โ””โ”€โ”€ state/                      (๋‹ค์Œ ์ ๊ฒ€ ๋น„๊ต ๊ธฐ์ค€)

18. ์šฉ์–ด์ง‘

๋ณธ README์™€ ์ฝ”๋“œ์— ๋“ฑ์žฅํ•˜๋Š” ๋ณด์•ˆ ์šฉ์–ด๋“ค์„ ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์šฉ์–ด ์„ค๋ช…
SUID (Set-User-ID) ํŒŒ์ผ์— ๋ถ€์—ฌํ•˜๋Š” ํŠน์ˆ˜ ๊ถŒํ•œ. ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๊ฐ€ ์‹คํ–‰ํ•ด๋„ ํŒŒ์ผ ์†Œ์œ ์ž(๋ณดํ†ต root) ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๊ณต๊ฒฉ์ž๊ฐ€ ์ž๊ธฐ ๋ฐฑ๋„์–ด์— SUID๋ฅผ ๋ถ™์ด๋ฉด ๊ถŒํ•œ ์ƒ์Šน ํ†ต๋กœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
LKM ๋ฃจํŠธํ‚ท (Loadable Kernel Module rootkit) ์ปค๋„์— ๋กœ๋“œ๋˜์–ด ๋™์ž‘ํ•˜๋Š” ์•…์„ฑ ๋ชจ๋“ˆ. ์‚ฌ์šฉ์ž ์˜์—ญ(ps, ls ๋“ฑ)์—์„œ๋Š” ์ž๊ธฐ ํ”์ ์„ ์ˆจ๊ธธ ์ˆ˜ ์žˆ์–ด ํƒ์ง€๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.
C2 (Command and Control) ๊ณต๊ฒฉ์ž์˜ ๋ช…๋ น ์ œ์–ด ์„œ๋ฒ„. ์นจํ•ด๋œ ์„œ๋ฒ„๊ฐ€ ์ •๊ธฐ์ ์œผ๋กœ ์ ‘์†ํ•ด ๋ช…๋ น์„ ๋ฐ›๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
๋ฐฑ๋„์–ด ์ •์ƒ ์ธ์ฆ ์ ˆ์ฐจ๋ฅผ ์šฐํšŒํ•ด ์‹œ์Šคํ…œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์ˆจ๊ฒจ์ง„ ํ†ต๋กœ. ์ƒˆ ์‚ฌ์šฉ์ž ๊ณ„์ •, SSH ํ‚ค, LISTEN ํฌํŠธ, ๋ณ€์กฐ๋œ sshd ๋“ฑ ๋‹ค์–‘ํ•œ ํ˜•ํƒœ.
์ง€์†์„ฑ (Persistence) ์žฌ๋ถ€ํŒ…์ด๋‚˜ ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ ํ›„์—๋„ ๋ฐฑ๋„์–ด๊ฐ€ ๋‹ค์‹œ ์‹คํ–‰๋˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜. cron, systemd timer, rc.local, ld.so.preload ๋“ฑ.
MITM (Man-In-The-Middle) ๋‘ ํ†ต์‹  ๋‹น์‚ฌ์ž ์‚ฌ์ด์— ๊ณต๊ฒฉ์ž๊ฐ€ ๋ผ์–ด๋“ค์–ด ํŠธ๋ž˜ํ”ฝ์„ ๊ฐ€๋กœ์ฑ„๋Š” ๊ณต๊ฒฉ. ๊ฐ€์งœ CA ์ฃผ์ž…, DNS ํ•˜์ด์žฌํ‚น, /etc/hosts ์œ„์žฅ ๋“ฑ์ด ์ธํ”„๋ผ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
sudoers sudo ๋ช…๋ น์˜ ๊ถŒํ•œ ์„ค์ • ํŒŒ์ผ. NOPASSWD ์˜ต์…˜์€ ํŒจ์Šค์›Œ๋“œ ์—†์ด sudo ์‚ฌ์šฉ์„ ํ—ˆ์šฉ โ€” ๊ณต๊ฒฉ์ž๊ฐ€ ์ž์ฃผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฑ๋„์–ด.
PAM (Pluggable Authentication Modules) Linux ์ธ์ฆ ํ”„๋ ˆ์ž„์›Œํฌ. ๋ณ€์กฐ๋˜๋ฉด ํŒจ์Šค์›Œ๋“œ ๊ฐ€๋กœ์ฑ„๊ธฐ, ์ธ์ฆ ์šฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
LD_PRELOAD ๋™์  ๋งํฌ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ ์šฐ์„  ๋กœ๋“œํ•  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ง€์ • ํ™˜๊ฒฝ๋ณ€์ˆ˜. ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ์— ์•…์„ฑ ํ•จ์ˆ˜๋ฅผ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ•๋ ฅํ•œ ๋ฃจํŠธํ‚ท ๋„๊ตฌ.
Bind shell ๊ณต๊ฒฉ์ž๊ฐ€ ์„œ๋ฒ„์— ๋„์›Œ๋‘” LISTEN ํฌํŠธ๋กœ ๋“ค์–ด์™€์„œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฑ๋„์–ด.
Reverse shell ์นจํ•ด๋œ ์„œ๋ฒ„๊ฐ€ ๊ณต๊ฒฉ์ž ์„œ๋ฒ„๋กœ ์ •๊ธฐ ์—ฐ๊ฒฐ์„ ๋งŒ๋“ค์–ด ๋ช…๋ น์„ ๋ฐ›๋Š” ๋ฐฑ๋„์–ด. ๋ฐฉํ™”๋ฒฝ์˜ outbound ํ†ต์ œ๊ฐ€ ์•ฝํ•˜๋ฉด ํ†ต๊ณผ.
์›น์‰˜ ์›น ์„œ๋ฒ„์— ์—…๋กœ๋“œ๋œ PHP/JSP/ASP ํŒŒ์ผ๋กœ, HTTP ์š”์ฒญ์„ ํ†ตํ•ด ์„œ๋ฒ„ ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ฐฑ๋„์–ด.
EICAR ์•ˆํ‹ฐ๋ฐ”์ด๋Ÿฌ์Šค ํ…Œ์ŠคํŠธ์šฉ ํ‘œ์ค€ ๋”๋ฏธ ํŒŒ์ผ. ์‹ค์ œ ์•…์„ฑ ๊ธฐ๋Šฅ์€ ์—†์ง€๋งŒ ๋ชจ๋“  AV๊ฐ€ ์ด๋ฅผ ํƒ์ง€ํ•˜๋„๋ก ์•ฝ์†๋˜์–ด ์žˆ์–ด ๊ฒ€์ฆ์— ์‚ฌ์šฉ. ClamAV ๋„์ž… ํ›„ 24 ๋ชจ๋“ˆ์ด ์ •์ƒ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด /tmp ์— EICAR ๋ฌธ์ž์—ด์„ ํ•œ ์ค„ ์ €์žฅํ•˜๊ณ  ์ ๊ฒ€์„ ๋Œ๋ฆฌ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
WARMUP_PERIOD secchk ์˜ ๊ฐ€๋™ ์ดˆ๊ธฐ ์•ˆ์ •ํ™” ๊ธฐ๊ฐ„ (8์ผ). ์–ด์ œ vs ์˜ค๋Š˜ ๋น„๊ต๊ฐ€ ์˜๋ฏธ ์žˆ์–ด์ง€๊ธฐ ์ „๊นŒ์ง€ ์ผ๋ถ€ ๊ฒ€์‚ฌ๋ฅผ ๊ฒฉํ•˜ํ•ด ๊ฑฐ์ง“์–‘์„ฑ์„ ๋ฐฉ์ง€.
ํ•ซ์ŠคํŒŸ / ์ฝœ๋“œ ์˜์—ญ ๋””์Šคํฌ ์ ๊ฒ€ ๋Œ€์ƒ์˜ ๋ถ„๋ฅ˜. ํ•ซ์ŠคํŒŸ(๊ณต๊ฒฉ ํ‘œ์ , ๋ณ€๋™ ์žฆ์Œ)์€ ๋งค์ผ, ์ฝœ๋“œ ์˜์—ญ(์‹œ์Šคํ…œ ๋””๋ ‰ํ† ๋ฆฌ)์€ ์š”์ผ๋ณ„ 1/7์”ฉ.
chattr +i ext ํŒŒ์ผ์‹œ์Šคํ…œ์˜ immutable ์†์„ฑ. ์„ค์ •๋œ ํŒŒ์ผ์€ root ๊ถŒํ•œ์ด์–ด๋„ ์‚ญ์ œ/์ˆ˜์ •์ด ๊ฑฐ๋ถ€๋ฉ๋‹ˆ๋‹ค. secchk ๋Š” ๊ฒฐ๊ณผ ํŒŒ์ผ์„ ๋ณดํ˜ธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ.

๋ฌธ์„œ ๋. ์ถ”๊ฐ€ ์งˆ๋ฌธ์ด๋‚˜ ๊ฐœ์„  ์ œ์•ˆ์€ ์ฝ”๋“œ ์ฃผ์„์„ ํ•จ๊ป˜ ์ฐธ์กฐํ•ด์ฃผ์„ธ์š”.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages