All posts

공부/정보보안기사

SSRF(Server Side Request Forgery)

공격자가 조작된 요청을 웹서버에 전송하여 웹서버가 내부 네트워크에 있는 다른 서버에 비정상적인 요청을 보내는 기법

 

대응방법

* 사용자 입력값을 다른 시스템의 서비스 호출에 사용하는 경우, 사용자의 입력값을 화이트리스트 방식으로 필터링

   만약 랜덤한 값을 사용할 경우 블랙리스트 방식으로 필터링

* 동일한 내부 네트워크에 있는 서버 간이라도 기기 인증, 서비스 접근 권한 등을 확인하여 요청을 처리

 

CSRF(Cross Site Request Forgery)

정상적인 경로를 통한 요청과 비정상 요청을 서버가 구분하지 못할 경우, 공격자가 스크립트 구문을 이용하여 정상적인 사용자가 조작된 요청을 전송하도록 하는 기법

 

ex) 조작된 요청 정보를 게시글에 포함하여 희생자가 조회하면서 비정상적인 요청을 서버에 요청함.

 

대응방안

* HTTP 요청 내에 예측할 수 없는 임의의 토큰을 추가하여 정상적인 요청과 비정상적인 요청을 구분.

* XSS의 공격 방식과 유사함으로 XSS에 대한 취약점을 제거하는 것을 권장

크로스 사이트 스크립트(XSS)

공격자가 입력 가능한 폼에 악의적인 스크립트를 삽입하여 희생자 측에서 실행되도록 하여 개인정보 및 쿠키 정보 취득

 

Stored XSS

게시판 등의 입력폼을 통해 악성스크립트를 DB에 저장하여 희생자가 요청할 때 클라이언트 측에서 실행되는 방식

 

* 특수문자를 Escape 처리

htmlspecialchars()

 

Reflected XSS

외부의 악성 스크립트가 희생자 액션에 의해 취약한 웹서버로 전달. 응답 페이지에 악성 스크립트를 삽입하는 방식

 

DOM based XSS

희생자의 웹 브라우저에서 응답 페이지에 포함된 자바스크립트가 동작하면서 DOM 객체를 실행할 때 악성 스크립트가 동작하는 방식

 

해결방안

* 서버 단에서 입력 값 검증 필요

* 특수문자를 일반 문자로 치환 처리

SQL Injection

SQL 질의를 변조/삽입하여 비정상적으로 DB를 접근하는 기법

* 무료 SQL Injection 취약점 스캐너 - Nikto, SQLMap, Absinthe

 

Form SQL Injection

HTML Form 기반 인증을 할 경우, 사용자 인증 sql query의 조건절(where)이 항상 참이 되도록 조작

 

예시 코드

$sql = "SELECT id, pass FROM member WHERE id='$id' and pass='$pass'";

 

id 입력란에 아래와 같은 코드 삽입으로 공격

 

MYSQL

' or 1=1#

 

MSSQL, Oracle

' or 1=1--

 

예방

* 특수문자 Escape 처리

php.ini
---------------
magic_quotes_gpc = On
---------------
mysql_real_escape_string()

 

* 선처리 질의문(Prepared Statement)을 통해 SQL Injection 방지

$stmt = $connecti->prepare("SELECT id, pass FROM member WHERE id=? AND pass=?");
$stmt->bind_param("ss",$id,$pass);
$stmt->execute();
$stmt->bind_result(&col1,$col2,$col3);

 

* 파라미터 필터링(Parameter Filtering)을 통한 SQL Injection 방지

    BlackList 문자열 생성 후 해당 문자열이 포함될 경우 사용할 수 없도록 설정.

 

Union SQL Injection

UNION을 이용하여 다른 쿼리문의 결과와 결합해 공격하는 기법

컬럼 개수를 파악해서 진행해야 한다.

 

ex) id 입력란에 order by를 이용하여 컬럼 개수를 파악한다.

오류가 발생할 경우, 해당 테이블의 컬럼이 이전 컬럼까지 존재한다는 것을 유추할 수 있다.

' order by 3 #

 

SQL Injection 대응 방안

1. 문자열 필터링

2. MS-SQL 확장 프로시저 제거

3. WAS의 dbuser 권한 제한

4. Prepared Statement 사용

 

Error-Based SQL Injection

SQL 쿼리에 따른 에러 값을 기반으로 DB 정보를 수집하여 공격하는 기법

 

Blind SQL Injection

질의 결과의 True/False를 통해 의도하지 않은 SQL 쿼리를 실행시키는 기법

SNMP(Simple Network Management Protocol)

Polling 방식

UDP/161 사용.

Manager가 요청한 정보를 Agent가 응답하는 방식.

주기적이거나 상태 변화 정보를 수집하는데 사용.

 

Event Reporting 방식

UDP/162 사용.

Agent에 Event 발생 시 Manager에 정보를 전달하는 방식.

 

SNMP 보안

Community String

Server와 Client가 데이터를 교환하기 전에 인증을 위해 사용하는 String 값

 

RO(Read-Only) 설정

RO를 설정하여 중요 설정을 수정할 수 없게 수정

 

SNMPv3 보안

USM(User Security Model) - 비인가 사용자에 의한 데이터의 무결성 침해, 기밀성 침해, 재사용 공격에 대응

VACM(View-based Access Control Mode) 

Authoritative Engine - 재전송 공격 방지

보안 매개변수

msgAuthoritativeEngindID/Boots/Time - 메시지의 유효 시간을 계산하여 재전송 여부 파악

msgUserName, msgAuthenticationParameters - 메시지 위변조 공격 방지

msgPrivacyParameters - 정보노출 공격 방지