Continuous Challenge

시큐어코딩 (1일차) 본문

Study/Secure Coding

시큐어코딩 (1일차)

응굥 2020. 1. 15. 17:28
728x90
728x90

김영숙 강사님(주식회사 오픈이지 대표)

 

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로 읽어올 수 있는 쿠키가 가져와진다.

네이버 창을 띄운 후, javascript:document.cookie를 주소창에 입력한 결과

  세션 : 브라우저별로 생성됨. 

 

 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(\)문자는 \\로)

 

   

 

728x90
728x90

'Study > Secure Coding' 카테고리의 다른 글

시큐어코딩 (3일차)  (0) 2020.01.17
시큐어코딩 (2일차)  (0) 2020.01.16
Comments