카테고리 없음

SQL Injection, Cross-Site Scripting(XSS), Buffer Overflow 241211

mezzanineX 2024. 12. 11. 21:56

q1: SQL Injection, Cross-Site Scripting(XSS), Buffer Overflow

a1:

SQL 인젝션 (SQL Injection)

개념

SQL 인젝션은 웹 애플리케이션의 취약점을 이용해 악의적인 SQL 명령어를 주입하여 데이터베이스를 조작하거나 민감한 정보를 탈취하는 공격입니다. 주로 입력값 검증이 제대로 이루어지지 않은 경우 발생합니다.

공격 원리

공격자는 사용자의 입력값을 그대로 SQL 쿼리에 삽입하도록 유도하여 데이터베이스 명령을 변경합니다.
예를 들어, 로그인 시스템에서 다음과 같은 쿼리가 있다고 가정합니다:

SELECT * FROM users WHERE username = 'admin' AND password = 'password';

공격자가 username에 admin' --를 입력하면 쿼리가 다음과 같이 변경됩니다:

SELECT * FROM users WHERE username = 'admin' --' AND password = 'password';

--는 주석 처리 기호로, 이후 조건이 무시되며 비밀번호 없이도 로그인됩니다.

피해 사례
데이터베이스에서 민감한 정보(사용자 계정, 비밀번호 등) 탈취.
데이터베이스 삭제, 수정, 악성 명령 실행.

예방 방법
1. 입력값 검증 및 필터링: 입력값을 검증하고, 예상치 못한 문자를 제거.
2. Prepared Statement 사용: 파라미터화된 쿼리를 사용해 입력값과 쿼리를 분리.
3. 최소 권한 원칙: 데이터베이스 계정에 최소한의 권한만 부여.
4. WAF(Web Application Firewall): SQL 인젝션 패턴을 탐지하고 차단.

크로스 사이트 스크립팅 (XSS, Cross-Site Scripting)

개념

XSS는 웹 애플리케이션의 입력 필드악성 스크립트를 삽입하여 다른 사용자의 브라우저에서 이를 실행하게 하는 공격입니다. 주로 사용자 입력값이 검증 없이 웹 페이지에 출력될 때 발생합니다.

공격 원리

공격자는 악성 JavaScript 코드를 삽입하여 피해자의 브라우저에서 이를 실행시킵니다. 주로 다음과 같은 형태로 실행됩니다:
1. Stored XSS: 악성 코드가 데이터베이스에 저장되어 다수의 사용자가 접속 시 실행.
2. Reflected XSS: 악성 코드가 URL이나 요청 파라미터에 포함되어 서버로부터 즉시 응답으로 반환.
3. DOM-based XSS: 클라이언트 측 코드에서 악성 입력값이 처리되어 발생.

피해 사례
세션 하이재킹: 사용자의 쿠키를 탈취하여 계정을 도용.
피싱: 악성 코드로 가짜 로그인 폼을 만들어 정보를 수집.
악성 스크립트 실행: 브라우저에서 원하지 않는 동작을 수행.

예방 방법
1. 입력값 검증: HTML, JavaScript, URL 등에서 예상치 못한 태그나 특수문자를 제거.
2. 출력값 이스케이프: HTML 특수 문자를 변환(<, >를 &lt;, &gt;로 변환).
3. Content Security Policy (CSP): 스크립트 소스를 제한하여 외부 스크립트 실행 방지.
4. HTTP-Only 쿠키: 쿠키가 JavaScript로 접근되지 않도록 설정.

버퍼 오버플로우 (Buffer Overflow)

개념

버퍼 오버플로우는 프로그램이 **고정된 메모리 영역(버퍼)**에 초과된 데이터를 기록할 때 발생하는 취약점입니다. 이로 인해 메모리의 다른 영역이 덮어씌워져 악성 코드 실행 또는 시스템 충돌을 유발합니다.

공격 원리
1. 프로그램은 입력값을 처리할 때 크기 제한 없이 메모리에 기록.
2. 공격자가 입력값의 크기를 초과하는 데이터를 전달하여 메모리의 다른 영역에 데이터를 덮어씌움.
3. 덮어씌운 데이터를 악성 코드로 구성하여 실행(예: Return Address를 덮어씌움).

피해 사례
시스템 제어권 탈취: 공격자가 프로그램 흐름을 조작하여 악성 코드를 실행.
서비스 거부(DoS): 메모리 덮어씌움으로 인해 프로그램이 비정상 종료.
데이터 유출: 메모리에 저장된 민감한 데이터를 공격자가 탈취.

예방 방법
1. 입력값 크기 제한: 고정된 버퍼 크기를 초과하지 않도록 제한.
2. 메모리 보호 기법:
ASLR(Address Space Layout Randomization): 메모리 주소를 무작위화하여 예측 어렵게 함.
DEP(Data Execution Prevention): 데이터 영역에서 코드 실행을 금지.
3. 안전한 함수 사용: C/C++에서 strcpy() 대신 strncpy() 같은 경계 검사가 포함된 함수 사용.
4. 정적 분석 툴 사용: 코드에서 잠재적 버퍼 오버플로우 취약점을 식별.

이 세 가지는 모두 웹 애플리케이션 보안에서 심각한 취약점으로 간주되며, 사전 예방 및 모니터링이 필수적입니다.

반응형