피드로 돌아가기
GeekNewsSecurity
원문 읽기
컴파일러가 싫다
Wasm 기반 PoW 도입으로 봇 트래픽 90% 차단 및 응답속도 70초에서 2.12초로 개선
AI 요약
Context
AI 크롤러 및 DDoS 공격으로 인한 서버 부하 급증과 서비스 불능 상태 해결을 위해 WebAssembly(Wasm) 기반의 Proof-of-Work(PoW) 검증 체계 도입 필요성 제기. 클라이언트와 서버가 동일한 검증 로직을 공유하여 중복 구현을 방지하고 일관된 검증 프로세스를 유지하는 구조 설계 지향.
Technical Solution
- 단일 검증 로직 정의를 위해 클라이언트와 서버 모두 동일한 Wasm 바이너리를 실행하는 Lockstep 구조 설계
- Wasm 비활성화 환경 대응을 위해 wasm2js를 통한 JavaScript 재컴파일 대체 경로 확보
- 빌드 결정성(Determinism) 확보를 위해 wasi-sdk 기반의 wasm2js 커스텀 번들링 수행
- $PATH 내 wasm-opt 버전 차이로 인한 비결정성 제거를 위해 --no-wasm-opt 옵션 적용
- ASLR로 인한 포인터 값 변동 및 예외 처리 코드 순서 변경 문제 해결을 위해 setarch --addr-no-randomize 적용
- 아키텍처별(x86_64, arm64) Known-good SHA-256 체크섬 검증 프로세스를 CI 파이프라인에 통합
실천 포인트
1. 재현 가능한 빌드(Reproducible Build) 구현 시 __DATE__, __TIME__ 매크로 사용 제거
2. 컴파일러가 내부적으로 호출하는 외부 최적화 도구(예: wasm-opt)의 버전을 고정하거나 실행 경로를 명시적으로 제어
3. 메모리 주소 무작위화(ASLR)가 바이너리 출력 결과에 영향을 주는지 확인하고 필요 시 빌드 환경에서 비활성화
4. 다중 아키텍처 환경에서 바이너리 일치 여부를 확인하기 위해 아키텍처별 체크섬 검증 단계 도입