본 가이드는 Ruby on Rails 애플리케이션에서 발생할 수 있는 8가지 주요 보안 취약점을 다루며, 각 취약점의 작동 방식과 방어 전략을 설명합니다.
1. 비기술적 보안 공격
- 평문 비밀번호 이메일 전송, 모든 곳에 동일한 비밀번호 사용, 민감 데이터 노트북 보관 등 상식적인 보안 수칙 위반으로 발생하는 문제입니다.
2. 크로스 사이트 스크립팅 (XSS)
-
악성 스크립트가 사용자 페이지에 삽입되어 세션 쿠키 탈취, 악성 콘텐츠 주입 등을 유발합니다.
-
방어: 사용자 입력의 모든 텍스트를 이스케이프하여 JavaScript가 무해한 텍스트로 변환되도록 합니다. 최신 Rails는 기본적으로 HTML 출력을 이스케이프하지만,
html_safe사용 시 주의해야 합니다.
3. 크로스 사이트 요청 위조 (CSRF/XSRF)
-
사용자가 인지하지 못하는 사이에 인증된 요청을 강제로 실행하게 합니다 (예: 비밀번호 변경).
-
방어: Rails는
authenticity_token을 통해 기본적으로 CSRF를 방어합니다. 컨트롤러에서skip_before_action :verify_authenticity_token을 사용하거나 GET 요청으로 중요한 작업을 처리하는 것을 피해야 합니다.
4. 중간자 공격 (MITM) 및 패킷 스니핑
-
사용자와 서버 간의 통신을 가로채거나 변조합니다. 특히 공용 Wi-Fi에서 쿠키 탈취가 쉽습니다.
-
방어: 모든 통신에 HTTPS를 사용하고 Strict Transport Security를 따릅니다. Rails 3부터는 기본적으로 Secure Cookies를 사용하여 HTTPS 연결에서만 쿠키가 전송됩니다.
5. SQL 인젝션 (SQLI)
-
악성 SQL 코드를 주입하여 데이터베이스를 조작하거나 민감 정보를 탈취합니다.
-
방어: Rails는 대부분의 경우 매개변수를 이스케이프하여 SQL 인젝션을 방어합니다. 그러나
sum,pluck등 원시 SQL을 사용하는 메서드에 사용자 입력을 직접 전달할 때는 주의해야 합니다.
6. 대량 할당 (Mass Assignment) 및 매개변수 주입
-
사용자가 의도치 않은 모델 속성(예:
admin: true)을 변경하도록 허용합니다. GitHub 해킹 사례가 대표적입니다. -
방어: Strong Parameters를 사용하여 허용할 속성을 명시적으로 지정합니다. Rails 4부터는 기본 보호 기능입니다.
7. 서비스 거부 공격 (DOS/DDOS)
-
과도한 트래픽으로 서버에 부하를 주어 정상적인 서비스 제공을 방해합니다.
-
방어: 속도 제한(Rate Limiting) Gem, Rails 스로틀링 미들웨어, Cloudflare와 같은 프록시 서비스를 활용하여 방어합니다.
8. 플랫폼 공격 (애플리케이션 호스트 익스플로잇)
-
운영 체제나 애플리케이션 스택의 취약점을 악용하여 메모리 고갈, CPU 사용량 증가, 디스크 공간 소모 등을 유발합니다 (예: SYN Flood).
-
방어: 운영 체제 패치, 불필요한 서비스 비활성화, SSH 비밀번호 인증 금지 등의 기본 서버 보안 수칙을 지킵니다.
fail2ban과 같은 도구로 자동 공격 탐지 및 차단을 구현합니다.