일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Java의정석
- 자바공부
- REGEXP_SUBSTR
- 자바의정석
- docker
- 스프링입문
- 자바연습문제
- 이것이자바다
- Numpy
- 불친절한 SQL 프로그래밍
- 계층 쿼리
- 자바의정석 연습문제
- Secure Coding
- DispatcherServlet
- 스프링 부트와 JPA
- Spring
- java
- 스프링MVC
- JPA
- 스프링 핵심원리
- inflearn
- Python
- 인프런
- 분석함수
- 불친절한SQL프로그래밍
- 시큐어코딩
- 서블릿
- 스프링
- 김영한
- 제네릭
- Today
- Total
Continuous Challenge
시큐어코딩 (1일차) 본문
김영숙 강사님(주식회사 오픈이지 대표)
PART 01. 안전한 소프트웨어 개발 방법론
CH1. 시큐어코딩 개요
1. 소프트웨어 개발보안의 필요성
2. 침해 사고 사례
- 오버플로우와 언더플로우
→ 세이프매스(Safemath) : 오버플로우를 방지하기 위해 사용하는 함수.
- OpenSSL HeartBleed 취약점 : OpenSSL에서 서버와 클라이언트간의 연결유지를 위해 전달되는 실제 데이터 길이와 메시지로 전달되는 데이터 길이값을 서버가 비교하지 않고 처리하여 인접한 메모리 정보 유출
3. 보안 약점/취약점 DB 활용
- CWE 취약점 DB활용 (http://cwe.mitre.org)
- SANS TOP 25 (http://www.sans.org/)
→ 2013년도 버전 TOP 25 유지를 권장
- CERT Secure Coding Standard
- OWASP TOP 10 (https://www.owasp.org/index.php/Korea)
♣ 보안사고 수습 시 가장 중요한 것 : 서비스 다운타임을 줄이는 것.
사고가 일어났을 때 마지막으로 방어할 수 있는 것은 ★암호화★이다.
- 행정안전부 소프트웨어 개발보안 가이드
CH2. 개발보안 방법론
1. 소프트웨어 개발보안 방법론
SW 개발보안이란? 안전한 SW 개발을 위해 소스코드 등에 존재할 수 있는 잠재적인 보안약점을 제거하고, 보안을 고려하여 기능을 설계, 구현하는 등 SW 개발 과정에서 실행되는 일련의 보안활동
- 구현단계에서보다 설계단계에서 보안전문가가 투입되는 것이 훨씬 효율적, 효과적이다.
현재는 SW 개발과정 중 소스코드 구현단계를 중심으로 SW 개발보안 적용
※ 보안취약점(Vulnerability) : 해킹 등 실제 보안사고에 이용되는 SW 보안약점
※ 보안약점(Weakness) : 보안취약점의 근본 원인이 되는 SW 상의 허점, 결점, 오류 등
2. 개발보안 사례
- CLASP
- Microsoft SDL : 보안 개발 방법론의 대표적인 사례로 마이크로소프트의 개발 생명주기(MS-SDL)는 자체적으로 개발한 개발 생명주기를 제품 개발 전 과정에 적용토록 하여 보안취약점의 원인을 제거하도록 하였다.
(교육 -> 계획/분석 -> 설계 -> 구현 -> 시험/검증 -> 배포/운영 -> 대응)
*다운타임을 줄이는 가장 좋은 방법은 '훈련'이다.
- Seven Touch Point : 실무적으로 검증된 방법론 중 하나로 보안 강화 기법(build security in)을 지원한다.
(요구사항과 USE CASES -> 구조 설계 -> 테스트 계획 -> 코드(구현) -> 테스트, 테스트결과 -> 현장과의 피드백)
PART 02. 안전한 소프트웨어를 만드는 시큐어코딩 기법
1. 실습
- VM Ware 15.5 Player (최신버전) 설치
Web Server
Proxy Server --> Paros
Client Browser
(Kali => Proxy Server + Client Browser)
cmd 창 -> ipconfig 명령어 -> VMnet8 IPv4 주소 확인
VMware -> Kali -> ifconfig -a 에서 eth0의 ip 주소 확인
vi etc/network/interfaces 파일 생성하여 수정.
실습 1. Paros - Trap - Trap request 체크 후 존재하지 않는 url 검색 후 GET 대신 OPTIONS로 수정 후 continue 버튼 클릭하면 200 OK 가 된다.
실습 2. PUT 으로 존재하지 않는 html을 작성 후 continue 하면 새로운 html파일이 생성된다.
-> Tomcat web.xml 파일에서 init-param 태그의 readonly의 속성을 false라고 하면 실습 2와 같이 외부에서 write가 가능하다.
실습 3. 위와 같이 톰캣 설정파일 수정 후, GET 대신 DELETE로 수정 후 continue 하면 403 Forbidden(권한없음)이 발생한다.
2. HTTP 메시지 구조와 취약점
Method | 설명 |
GET | 자원 요청(default). 요청 파라미터를 URL에 붙여서 전송 |
POST | 자원 요청. 요청 파라미터를 body에 붙여서 전송 |
HEAD | HTTP Header 정보만 요청. 메타 정보 획득이나 Hyper Text의 링크 유효성을 검사하는 용도로 사용 |
PUT | URL 자원을 생성하도록 요청. 파일 업로드 가능 |
DELETE | URL 자원을 삭제하도록 요청. 파일 삭제 가능 |
TRACE | 진단을 위한 목적으로 사용되는 메소드로, 서버는 응답 바디에 요청받은 자료와 똑같은 내용을 보냄 |
OPTIONS | 응답 가능한 HTTP 메소드를 요청 |
3. 쿠키(Cookie)와 세션(Session)
HTTP -> 신뢰성 있는 통신을 위해 TCP/IP 를 사용.
실습 ) 사이트 url 입력 후, javascript:document.cookie를 주소창에 입력하면 javascript로 읽어올 수 있는 쿠키가 가져와진다.
세션 : 브라우저별로 생성됨.
4. 인코딩
인코딩 스키마
- 문자 인코딩 : 문자들의 집합을 컴퓨터에서 저장하거나 통신에 사용할 목적으로 부호화하는 방법을 가리키며, 그냥 인코딩이라고도 불린다.
- URL 인코딩 : URL에 포함된 문자들이 안전하게 웹서버에 전달될 수 있도록 특수한 기능을 가진 메타 문자들을 브라우저가 인코딩하여 전달한다.
- HTML 인코딩 : HTML 문서에서 특별한 기능을 수행하는 문자들을 안전하게 브라우저에 표시하기 위해 사용되는 인코딩 방식이다. -> XSS를 방지하기 위해 사용하는 방법 중 하나.
- BASE64 인코딩 : 모든 바이너리 데이터들을 출력 가능한 ASCII 문자들을 통해서만 안전하게 나타낼 수 있게 한다. BASE64 인코딩은 이메일 첨부파일들을 인코딩해서 SMTP를 통해 안전하게 전송하거나 HTTP 승인을 할 경우 사용자 인증서를 인코딩할 때 사용한다.
* 인코딩과 디코딩의 개수가 맞는지 확인해야한다.
5. 정규식을 이용한 입력값 필터링
regexper.com : 정규식을 입력하면 그림으로 표현해주는 사이트
문제1 ) ^[0-9]$ : 시작과 끝 사이에 숫자가 아닌 값이 있는 값을 의미.
문제2 ) 숫자포함(1글자이상), 알파벳포함(대소문자 포함 1글자 이상), 특수문자(1글자 이상), 총 8~15글자까지 허용
=> ^(?=$^(?=.*[0-9]+)(?=.*[a-zA-Z]+)(?=.*[~!@#$%^&*()_+=<,.>/?]+).{8,15}$
- 자바 스크립트에서 정규식 사용하기 : 정규식을 처리할 RegExp 객체를 생성하거나, 객체 초기화 방법을 이용하여 정규식 패턴을 지정한다.
- 자바 프로그램에서 정규식 사용하기 : Pattern, Matcher 클래스 객체가 필요하다.
*일치 X -> 포함으로 : matcher.matches() X -> matcher.find() O
*대소문자 구분하지 않도록 flag 옵션주기. Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
(윈도우는 대소문자 구분하지 않고, JVM(서버)는 대소문자 구분)
*정규식에 공백 포함되도록 String regex="<script\\s*>.*</script\\s*>"; (escape(\)문자는 \\로)
'Study > Secure Coding' 카테고리의 다른 글
시큐어코딩 (3일차) (0) | 2020.01.17 |
---|---|
시큐어코딩 (2일차) (0) | 2020.01.16 |