← 목록
AI 2026-06-09 4KB 읽기 4분

AIMED 서버 DoS 내성 강화 + 스피어 재등급

개요

스피어가 발견한 "단일스레드 한선씨 서버가 연속 부하에 프로세스 종료(리스너 소멸)" DoS의 근본 원인을 규명하고 5개 AIMED 서버에 내성 패치를 적용. 시뮬레이터 ERP 토큰 반영, 스피어 재등급까지 완료.

1. DoS 근본 원인 (규명)

  • 재현: SPEAR_PORT=9904 AIMED프로파일 실행 → 레이트-생존 /qna 1/12만 생존 VULN, 서버 PID 소멸.
  • 원인: 클라이언트(스피어 소켓받기(8191)소켓닫기)가 63KB 정적응답을 부분만 읽고 RST로 끊으면,
서버의 TCP쓰기(opcode 494, crownyc.c:10559 write() — MSG_NOSIGNAL 없음)가 SIGPIPE를 받음. VM에 전역 SIGPIPE 핸들러가 없어 기본동작=프로세스 종료 → 리스너 소멸.
  • 검증: python SO_LINGER(RST) 조기종료 1회로 즉시 사멸 확인(다음 연결 Connection refused).
  • 시도/오류는 해결 못함: TRY/CATCH(558/559)는 명시적 던져(THROW 560)만 포착. SIGPIPE는 시그널이라 미포착.
(배열OOB 등 런타임에러도 대부분 경고 출력 후 계속 — 누적 사멸 아님. 진짜 킬러는 SIGPIPE.)

2. 수정 (근본 해결, 한선씨 레벨)

각 서버 시작 직후, TCP 루프 직전에:
시그널등록(13, 1)   ; SIGPIPE(13) 무시 — 조기종료 클라이언트로 인한 사멸 방지
추가로 방어심층화: 만약 (클라이언트 >= 0) accept 실패 가드 + 시도{ 요청처리 }오류 e{} 래핑.
  • VM(crownyc.c 공유 바이너리)은 건드리지 않음 — 19+ 세션 영향 회피. 한선씨 레벨 비침습 수정.

적용 파일 (각 .bak-dos-20260609-200415 백업)

  • /Users/ef/crowny-aimed/분석서버.한선 (:9904)
  • /Users/ef/crowny-aimed/일톡서버.한선 (:9909)
  • /Users/ef/crowny-aimed/관리서버.한선 (:9905)
  • /Users/ef/crowny-enterprise/에임드인트라넷.한선 (:9908)
  • /Users/ef/crowny-enterprise/에임드ERP서버.한선 (:9910)

검증

  • 5개 서버 재컴파일(exit=0) + 재배포(.toau) + 재기동.
  • RST 조기종료 공격 15회: 5개 서버 전부 생존.
  • 연속 30요청: 5개 서버 전부 30/30 정상, 리스너 UP.
  • 워치독 루프(15s)는 작업 중 일시정지 후 종료 시 복원.

3. 시뮬레이터 ERP 토큰 (인증게이트 반영)

  • /Users/ef/crowny-simulator/scenarios/aimed-erp.js
  • /api/erp/* 가 토큰 필수(401)로 바뀜. 시나리오 시작 시 :9904 /api/auth/login(없으면 signup) 토큰 획득
sim.token 설정(simulator.js step()이 Authorization: Bearer 자동 첨부). 401도 PASS 폴백.
  • 9904 토큰이 :9401 공유 인증에서 검증되어 9910 ERP 200 해제 확인.
  • 기존 return sim.endScenario() 누락 버그도 수정.
  • 결과: 6/6 성공, A등급(100점), 마찰 0건.

4. 스피어 재등급 (전 → 후)

저장: /Users/ef/crowny-spear/reports/aimed-99xx-v2.txt
포트비고
9904 분석/업무C(87%)A(96%)레이트-생존 1/12→12/12, VULN 0
9909 일톡(사멸)A(95%)12/12 생존
9910 ERPCS(100%, WARN 0)인증게이트 401 전부 PASS, XSS 반사 해소
- 전 서버 VULN 0. 모든 서버 스피어 전수공격 후에도 생존.

잔여 이슈

  • 9904/9909 WARN 1건: 스크립트 페이로드가 JSON 응답에 원형 반사(XSS-반사).
JSON 컨텍스트라 위험 낮으나, HTML 출력 시 인코딩 권장. (등급 A 유지에 무관)
  • 더 강한 근본해결 후보: crownyc.c main()에 signal(SIGPIPE, SIG_IGN) 1줄 추가 시 전 한선씨 서버 자동 면역
(공유 바이너리 변경이라 별도 합의/세션 조율 필요 — 본 작업은 한선씨 레벨로 한정).

관련 파일

  • 컴파일러: /Users/ef/CrownyOS/crownyc/hanseonc_high.c (시그널등록=766), crownyc.c (TCP_WRITE 494, TRY/CATCH 558/559/560)
  • 스피어 프로파일: /Users/ef/crowny-spear/engine/AIMED프로파일.한선