KMU-KISIA 정보보안 아카데미 재직자교육 -웹해킹방어를 위한 자바시큐어코딩 실무 교육을 듣고..
CH2 . 개발 보안 방법론
#시큐어 코딩
- "소스코드"의 잠재적 보안 취약점을 제거하고 보안관련 점검 문제점 제거
- 방법 : 코드검사 혹은 보안 솔루션도입.
# 소프트웨어 개발 보안
- "소프트웨어 개발 과정"에서 잠재적 보안 취약점을 제거하고 보안관련 점검 문제점 제거 하는 일련의 보안 활동
- 요구사항 분석
C(기밀성 1~3점) x I (무결성 1~3점) x A(가용성 1~3) =1~27점 으로 등급별 관리
- 설계
로그인 : 중요정보
관리자 페이지 : 중요정보, 별도 포트, 외부망
급여 : 경우에 따라. 공무원의 경우 이미 공개정보이기에 중요하지 않음
- 구현
- 테스트
시큐어코딩 설명 쉬운 사이트 : http://blog.naver.com/acornzone/220689199858
#위협모델링
4단계 위협에 대한 우선순위결정
1. 예상피해
2. 재연확률 : 공격이 성공할 확률?
3. 공격 용이도 : 공격을 위해 얼마나 많은 노력이 필요한가
4. 영향을 받는 사용자
5. 발견 용이성 : 얼마나 쉽게 취약성 발견되는가?
CH3 . 웹 어플리케이션 보안을 위한 기본지식
실습 환경 구축
http://openeg.co.kr/672
접속 및 다운로드
1. SecureCoding.zip
C:\ 폴더에 압축해제
2. WindowXP_client ZIp
3. VMWareWorkstation download 설치
mySQL 이미 설치된 컴퓨터는 3306 port kill(http://blog.naver.com/ooa1769/220557706943)
파로스를 이용한 예제 실행
사용자 컴퓨터 <---> 파로스 <--->웹서버
#HTTP 와 웹 구조 이해
- HTTP(HyperText Transfer Protocol)
서버 컴퓨터와 요청(request)/응답(response) 프로토콜
- HTML head ; body 설명
- HTML body ; 실제 데이터
응답(response)은 바디부분만 준다.
인코딩
# 인코딩 스키마
- 웹어플리케이션은 인코딩 스키마로 데이터를 안전하게 사용
- URL 인코딩: url에 글자들이 안전하게 서버 컴퓨터에 전달되도록 인코딩
, AJAX의 경우 내부에서 자동실행
ex) < (url 인코딩값 : %3C)
- HTML 인코딩: HTML 문서에서 특별한 기능을 수행하는 문자들을 안전하게 브라우저에 출력
ex) < (HTML인코딩값 : <)
- BASE64 인코딩: a-z,A-Z,0-9 알파뉴메릭 64개의 문자로 안전하게 인코딩
자세한설명 : http://cocomo.tistory.com/290
크로스 사이트 스크립트
- 유일하게 클라이언트 페이지 공격함 (대부분 서버 공격)
- 사회 공학적 기법 : 사용자가 요청을 보내야 공격이 성립됨, 클라이언트 에게 응답이 되지않으면.. 공격이 성립되지 않는다.
기법 1 : Reflective XSS 반사
클라이언트 입력 : ID "####" <=====> 서버 출력 : "####" 님 환영합니다.
악성코드 받을수 있는 유알엘을 삽입하여 메일로 보냄. 서버는 (악성코드 포함한)"####" 님 환영합니다. 를 출력
기법2 : Stored XSS
id=1에 DB에 저장. DB저장된 정보가 조회 되어 실행
기법3: DOM XSS 개요
클라이언트 입력 파라메터 1: "####" <=====> 다른 시첨에서 주어진 값을 실행할 때 문제 발생
해결방안
기법1 ==> 입력값.출력값 필터링으로 해결 (ex, SpringMVC 이용하는 경우)
==> 입력시 Fillter 에 XSS 설치시 기법1은 방어가능하나. 기법 2는 방어 한것이 아님.
==> 임의로 만든 로그인페이지 연결해서 아이디 패스워드를 얻을 수 있음
출력값
어디? Controller (실습 fillter)
View (실습 encoder)
어떻게? htmlEncoding
XSSFilter를 적용
어떤 방법? 화이트리스트 필터
블랙리스트 필터
입력값 어디? Filter 컴포넌트, (실습 XSS Filter)
인터셉터 컴포넌트(용도가 다름... 어떤값이 들어왔을 때 계속할지 차단할지)
어떻게? htmlEncoding
XSSFilter를 적용
- 어떤 ? 화이트리스트 필
블랙리스트 필터
칼리리눅스 ...악성코드 배포.... 공격서버 커넥션
el문 ${}
<p>${board.content}</p>
html 인코딩... p테크의 텍스트로 변경
lucy xss 는 화이트 xss
https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
크로스 사이트 필터를 또 뚫는... <IMG SRC="javascript:alert('XSS');"> <LINK REL="stylesheet" HREF="javascript:alert('XSS');"> ....브라우저마다 다르다.
필터는 실제로 체이닝 기능밖에 없음
Spring MVC ; HttpServletRequestWraper ;실제데이터를 싸는 기능 head, body 값을 확인
http://openeg.co.kr/383
filter 웹 컨테이너
디스페쳐 서블릿 스프링 컨테이너
web.xml 설명
->인코딩필터 -> 멀티파트 필터 -> 크로스 사이트 필터
멀티파트 필터 : 멀티파트 리졸빙...
a=10&b=10,20,30 -> wraper
http://openeg.co.kr/383
# 정규식
- 자바의 정규표현식은 특정한 규칙을 가지는 문자를 표현하는데 사용하는 형식 언어이다.
- java의 기본 API
ex) 이메일 정규식 [A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}
# 캡슐화의 위배
- OOP의 특징 !! : 상속 다형성 캡슐화
- 캡슐화 : data가 외부에서 직접적으로 접근못함... public, private 의도가 깨질때
- 싱글톤일 때 배열, 콜렉션의 데이터 관리에 유의할 것!!
:heap 에서 저장된 전역으로 사용되는 변수 값이 바뀌어 다른 쓰레드 영향받음
public class RoleTest { public static void main(String[] args) { Role r = Role.getInstance(); System.out.println(r.adminLists()); String[] a = r.getAdminRoles(); a[0]="홍길동"; System.out.println(r.adminLists()); } } |
public class Role { private String[] adminRoles = {"admin","root","manager"}; private static Role role; private Role() {}
public static Role getInstance() { if ( role == null ) { role=new Role(); } return role; } public String[] getAdminRoles() { String[] n = new String[adminRoles.length]; System.arraycopy(adminRoles,0,n,0,adminRoles.length); return n; } 생략 |
# 파인드시큐리티 버그 간단한 보안 툴 이용
- 일반 보안툴 :800개 ~1200개
- 파인드 시큐리티 버그 : 30개
정탐 , 오탐
- 보안 취약점과 보안약점은 검사하는 방법이 다름 , 최근 인공지능을 로깅으로 이용하려는 추세
- 오탐이 많아도 미탐이 적으면 사용. 미탐률이 적은게 가장중요.
findsecuritybugs
http://find-sec-bugs.github.io/download.htm
이클립스 플러그인에 저장
'For Real > Others' 카테고리의 다른 글
크리덴셜 (0) | 2018.06.12 |
---|---|
[2018]it+ 업무 용어 (0) | 2018.04.30 |
[KMU-KISIA 정보보안 아카데미]1. 보안 약점과 보안 취약점의 차이는? (0) | 2017.12.22 |
유용한 사이트 모음(개발) (0) | 2017.12.13 |
유용한 사이트 모음 (일반) (0) | 2017.12.13 |