Sparrow 사용을 통해 보안 :) 코딩을 하는 법
- 외부에서 들어올 수 있는 입력값은 오염된 값이라 판단하고 입력값 및 출력값 검증필터링을 수행
- 문자열 필터링 사용시 단어는 우회가 가능할 수 있으므로, 한글자씩 처리 하거나 의미 없는 문자 로 변경 replaceAll("<script>", " ");
- 사용자 추가 및 수정시 비밀번호는 영문자 , 숫자 , 특문 들을 최소 2개 이상 조합 하고 최소 자리 수 8자 이상
- 무작위 공격에 대비하기 위해 로그인 연속 실패시 로그인 잠금 , 캡챠 등의 제한 기능 을 추가
- 제어 (권한체크 , 파일업로드, 확장자체크등 )는 클라이언트(Java Script) 단은 무조건 우회가 가능하므로 반드시 서버단에 서 처리
- 404, 500 HTTP 에러 등은 WAS설정 을 통해 에러페이지로 리다이렉트하여 정보 제공 하지 말것
- 저장에 이용하는 해시함수는 반드시 솔트를 적용해야 하며 , 솔트는 사용자마다 다르게 랜덤값 적용
- 파일 업로드 확장자 체크는 화이트 리스트로 검사하며 , 부득이 하게 블랙 리스트로 검사시 , Uppercase, Lowecase 등을 이용 하여 대소문자 조합 확장자 공격을 방지
- 소스코드에 민감한 정보를 넣지 말아야 하며 , JSP 에서 주석사용시 <! -- -- >는 브라우저 소스보기로 확인이 가능하기 때 문에 <% -- -- %> 로 사용
Sparrow Eclipse PlugIn
1. Burp Suite
- 웹 애플리케이션 애플리케이션 동적 테스트 (웹 취약점 진단 )를 수행하기 위해 사용되는 프록시 도구로서 , Paros, OWASP ZAP, SuiteBurp Suite등이 있음
- 프록시 서버 , 웹 스파이더 , 인트루더 등 다양한 도구로 구성
- 프록시 서버 : 웹 어플리케이션에 전송되는 트래픽 (Request, Response) 을 조작할 수 있음
- 웹 스파이더 : 쿠키 정보를 검사하고 페이지에 전달되는 파라미터 정보를
*INTERCEPT ON
GET /download.do?filepath=/1485.1234.JSP HTTP/1.1
해당 파일패스 부분을 아래와 같이 바꿔준뒤 Forward
../WEB-INF/classes/DBConnection.class
2. JAD
Java 디컴파일러 (Decompiler DecompilerDecompiler Decompiler )
- .class 파일을 .java 파일로 변환
- Java 라이브러리 등 으로부터 소스를 추출하거나 역분석 시 사용
- 커맨드라인 기반으로 동작(exe)
- 디컴파일 결과로 java 파일이 생성됨
3. WebShell
개요
- 웹 페이지에서 웹 서버로 명령어를 실행하기 위해 만들어진 프로그램
-원격에서 웹 서버에 명령을 수행할 수 있도록 작성한 ASP, PHP, JSP, HTML JSP, HTML 등 웹 스크립트 형태를 가짐
- 웹쉘이 서버에 업로드되어 실행되면 공격자가 서버 명령을 실행가능
- 시스템 정보 파악 , 웹 서버 파일 열람 및 수정 , DB 접속 , 시스템 명령어 수행 등
• Oracle 모든 DB 테이블 정보 조회 : SELECT * FROM USER_TABLES;
• MySQL 모든 DB 테이블 정보 조회 : SHOW TABLES;
• MS -SQL 모든 DB 테이블 정보 조회 : SELECT * FROM information_schema.TABLE_CONSTRAINTS ;
• PostgreSQL 모든 DB 테이블 정보 조회 : select * from pg_tables ;
SQL injection
ex) 로그인 시 유저에 admin'-- 이라고 입력할 때 true를 반환한다.
*잘못된 예
query = "Select * from " +tableName + " Where name = "+name;
stmt = con.createStatement (query)
*조치 방법
query = "Select * from ? Where name = ? ";
stmt = con.createStatement (query);
stmt.setString(1, tableName);
stmt.setString(2, name);
크로스사이트 스크립트
검증되지 않은 외부 입력 값을 응답의 일부로 사용하는 경우
사용자 브라우저에서 악의적인 스크립트가 실행될 수 있는 보안약점
쿠키 정보를 탈취, 불법 광고 사이트로 이동
<script> : 스크립트 코드를 실행
<object> : Active-X 컨트롤을 실행
<applet> : 자바 애플릿 실행
<embed> : 객체(동영상, 음악) 등을 포함
<form> : 태그를 사용해 기존 폼을 수정하여 사용자의 민감정보 빼돌림
<img> : 이미지를 브라우저 상에서 로드
<iframe> : 웹문서 내에 특정 페이지를 로드
1. Reflected XSS
2. Stored XSS
<script>alert(1)</script>
<!-- 네이버로 이동 -->
<script>location.href ='http://naver.com'</script>
조치
- 단어보단 문자열 필터링
- 주석 공격 방지를 위해 !, - 문자열 필터링
- 단어들의 문장을 필터링하는 경우 의미없는 문자로 변경
param = param.replaceAll("<script>", "<scr(X)ipt>");
3.신뢰되지 않은 URL주소로 자동 접속 연결