본문 바로가기

카테고리 없음

[웹 보안] 웹 개발자를 위한 웹 보안 6장. 인젝션 공격

인젝션 공격: 공격자가 애플리케이션에 외부 코드를 주입해 애플리케이션을 통제하거나 민감한 정보를 읽으려고 발생시키는 동작.

 

웹사이트 인젝션 공격의 기초 - 해커들이 종종 HTTP 요청에 악의적인 코드를 전달해 서버가 코드를 실행하도록 유도하는 것.

 

인젝션 공격에는 4가지 유형이 있음.

1. SQL 인젝션 공격

: 기본 SQL 데이터베이스를 사용하며 데이터 쿼리를 불안정한 방식으로 구성하고 있는 웹사이트를 대상으로 함

(SQL 데이터베이스가 흔해서 웹사이트의 가장 큰 위험 요소)

 

- SQL

: 관계형 데이터베이스에서 데이터 및  데이터 구조를 추출함. 

관계형 데이터베이스: 데이터를 테이블에 저장

테이블의 각 행: 데이터 항목

 

- SQL 구문

INSERT 문: 데이터베이스에 행 추가

SELECT 문: 행 읽기

UPDATE 문: 행 업데이트

DELETE 문: 행 제거

 

-SQL 인젝션 공격의 구조

SQL 인젝션 공격 - 웹 서버가 데이터베이스 드라이버에 전달하는 SQL 문을 불안정하게 구성할 때 발생함.

-> 공격자는 HTTP 요청을 통해 인수를 전달해 드라이버가 개발자의 의도와 다른 작업을 수행할 수 있음

 

입력값 안에 작은따옴표나 SQL키워드(OR, -등)을 넣으면 공격자가 쿼리 구조를 조작할 수 있음

- 작은따옴표(')

SQL에서 문자열 리터럴은 '...'로  표현되므로 입력에 '가 들어가면 쿼리 문자열이 조기 종료되어 뒤에 오는 SQL 조각을 공격자가 삽입할 수 있음. -> 입력값 내의 ' 등을 에스케이프하거나 분리(파라미터화)해야 함.

- 인증 위회

주석문 (--) 사용 -> -- 뒤의 나머지 부분 SQL 주석이 되어 무시됨.

논리조건삽입 (OR '1'='1') -> 1=1은 항상 참이므로 조건 전제가 참이 될 수 있음

- DROP 명령 실행: 데이터베이스를 손상시키려고 users 테이블을 완전히 제거

 

-> 입력갑이 쿼리의 구조를 변형하면 인증체계와 데이터 무결성이 깨짐

 

조치 방안

a. 매개 변수화된 구문 사용

코드는 바인딩 매개 변수 사용해서 SQL 문 (프리페어드 스테이트먼트) 구성

 

b. 객체 관계 매핑 사용

ORM사용 - 애플리케이션 코드에서 SQL을 직접 작성하지 않고, 객체를 통해 데이터베이스를 다루도록 도와주는 라이브러리.

-> SQL문 일일이 작성 안 해도 됨 

 

c. 심층 방어 사용

입력값 검증, 최소 권한 원칙, 에러 메시지 제어, ORM/프레임워크 보안 설정 강화..

 

--> 웹사이트는 항상 중복으로 보호해야 함! 

 

 

 

2. 커맨드 인젝션 공격

: 공격자가 기본 운영체제에 안전하지 않은 명령줄 호출을 하는 웹사이트를 공격하는 데 사용

 

- 커맨드 인젝션 공격 구조

: 웹사이트에서 명령줄 호출을 사용한다면 공격자가 웹 서버를 속여 실행에 추가 명령을 주입할 수 없도록 해야 함. 

-> 단순 도메인 조회가 서버 전체의 제어권으로 이어질 수 있음. 

 

조치 방안

a. 이스케이프 제어 문자

HTTP요청에서 입력을 적절히 이스케이프해 커맨드 주입 방지 가능

-> 민감한 제어 문자를 안전한 대체 문자로 대체해야 함.

 

 

 

3. 원격 코드 실행

: 웹 애플리케이션에 악성 코드를 주입하여 서버에서 임의의 코드를 실행하게 만드는 취약점

 

- 원격 코드 실행 공격의 분석

SQL 인젝션, 커맨드 인젝션과 비슷하지만, 대상이나 영향 범위 더 넓음. 성공 시 시스템 완전 장악 가능.

 

조치 방안

a. 역직렬화 중 코드 실행 비활성화

신뢰할 수 없는 데이터 역직렬화 금지: 외부 입력 그대로 역직렬화 X

안전한 파서 사용: 객체 생성이나 함수 실행을 자동으로 하지 않는 안전한 라이브러리나 옵션 사용

 화이트이스트 기반 객체 허용: 역직렬화 시 생성 가능한 클래스 목록을 엄격히 제한

 

 

4. 파일 업로드 취약점

: 웹 애플리케이션이 제공하는 파일 업로드 기능을 악용하는 취약점

- 공격자는 정상적인 이미지나 문서 파일이 아닌 악성 스크립트나 실행 코드를 업로드할 수 있음

- 서버가 업로드된 파일을 검증하지 않으면 공격자가 서버 내에서 임의 코드 실행까지 가능

 

-파일 업로드 공격 분석

단순 악성 스크립트 업로드 , 파일 확장자 위장, 경로 조작

 

조치 방안

a. 보안 시스템의 호스트 파일

파일 업로드를 CDN/클라우드 스토리지에 위임

웹 서버가 직접 업로드 파일을 실행/저장하지 않게 분리

 

b. 업로드된 파일을 실행할 수 없는지 확인

업로드 파일은 웹서버 실행 경로와 분리된 별도 디렉터리에 저장

실행 권한 제거

파일명 무작위화, 확장자 화이트리스트 적용

 

c. 업로드된 파일의 내용 확인

확장자만 검사하지 않고 실제 MIME 타입, 헤더 검사 필요

의심 파일은 차단

 

d. 바이러스 백신 소프트웨어 실행

 

--> 파일 정리는 평리하지만, 방어가 약하면 곧바로 웹셀 -> 서버 장악

 

 

 

 

 

 

문제: 다음은 인젝션 공격에 대한 유형 별 설명으로 옳지 않은 것은?

1. SQL 인젝션 공격은 데이터 쿼리를 불안정한 방식으로 구성하고 있는 웹사이트를 대상으로 한다.

2. 커맨드 인젝션 공격은 공격자가 기본 운영체제에 안전하지 않은 명령줄 호출을 하는 웹사이트를 공격하는 데 사용한다.

3. 원격 코드 실행의 조치 방안으로는 역직렬화 중 코드 실행을 활성화시키는 것이다.

4. 파일 업로드 취약점의 가장 중요한 조치 방안은 업로드된 파일을 코드로 실행할 수 없음을 보장한다.