Continuous Challenge

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

Study/Secure Coding

시큐어코딩 (2일차)

응굥 2020. 1. 16. 17:37
728x90
728x90

분석, 설계단계 보안 요구항목 이해

1. 입력값 검증

2. 인증

3. 인가

4. 중요정보 처리

5. 암호화 - 키를 어떻게 생성하고 어떻게 반환할 건지가 가장 중요

6. 로깅/에러 처리 

7. 세션관리 - 세션 = stateless, 연결되지 않은 상태에서 관리. 

 

위협모델링

위협모델이란?

- 위협모델은 설계 단계에서 보안 문제에 대한 체계적인 접근에 도움을 주기 위한 것이다.

 

위협모델링 학습

위협모델링은 다음 4가지 질문에 집중하는 것부터 시작해야 한다.

- 무엇을 개발하고 있는가

- 무엇이 잘못될 수 있는가

- 잘못될 수 있는 것에 대해 어떤 조취를 취해야 하는가

- 분석을 잘 수행했는가

 

위협모델링 수행단계

1. 위협모델링을 수행할 팀을 소집한다.

 - 보안전문가가 팀장을 맡는 것이 좋다. 

2. 애플리케이션을 분해한다. 

3. 시스템에 대한 위협을 결정한다. 

 - 시스템에 대한 위협을 결정한다.

 - 위협을 분류한다. : 신분위장(Snooping identity), 데이터 변조(Tampering with data), 부인(Repudiation), 정보유출(Information disclosure), 서비스 거부(Denial of Service, DoS), 권한상승(Elevation of privilege)

4. 결정된 위협에 우선 순위를 정한다.

 - MS에서는 위험도를 계산하기 위해 DREAD를 이용한다.

  D(Damage potential, 예상 피해) : 피해가 얼마나 클 것인가?

  R(Reproducibility, 재현 확률) : 공격이 성공할 확률은 얼마인가?

  E(Exploitability, 공격 용이도) : 공격을 위해 얼마나 많은 노력과 기술이 필요한가?

  A(Affected users, 영향을 받는 사용자) : 위협이 악용되어 공격이 이뤄졌다고 할 때 얼마나 많은 사람이 영향을 받는가?

  D(Discoverability, 발견 용이성) : 얼마나 쉽게 취약성이 발견되는가?

5. 위협에 대응하는 4가지 방법 중 하나를 선택한다.

6. 위협에 대응할 기법을 선택한다.

 - 위협완화, 위협제거, 위협전가, 위험수용

7. 위협에 대응할 기술을 선택한다.

 - 신분 위장 : 적절한 인증, 패스워드는 저장하지 않음, PKI 시스템(SSL/TLS 이용)전자서명

 - 데이터 변조 : 해시, ACLs, Message authentication, 전자서명

 - 부인 : 전자 서명, 감사 로그

 - 정보 유출 : privacy-enhanced 프로토콜, 암호화, ACLs

 - 서비스 거부 : ACLs, 필터링

 

인젝션

- 외부 입력값에 대한 검증 없이 프로그램에서 사용되어 의도하지 않은 동작이 수행되는 취약점

SQL인젝션 방어

 : 정적쿼리 구조의 API사용으로 방어 가능

  또는 SQL에 사용되는 문자를 필터링하여 사용하므로써 방어가능

SQL 인젝션 취약성을 가지는 쿼리 구조

- 동적 쿼리 구조

SQL 인젝션 시큐어코딩 기법

- Hibernate Query Language 방식 

- MyBatis 방식

- Statement 방식 DB Query

- 입력값 필터링으로 안전한 값도 쿼리문에 사용

 

Command 인젝션

  1. 웹애플리케이션에 쉘을 생성하는 로직을 포함하지 않도록 설계 권고

  2. 프로세스 생성에 사용되는 입력값을 서버에서 제공하는 범위 내에서 사용하도록 제약을 줌으로써 방어 가능

  예) 소스코드에서 허용하는 값을 목록화하여 사용

     설정 파일, DB 등에 허용하는 값을 목록화하여 사용

 

입력 데이터 검증 기법

신뢰되지 않는 데이터 → 규범화 & 정규화(Normalization) 입력값 새니타이즈(Sanitize) 검증 데이터베이스 출력값 새니타이즈(LDAP DS, XML 파서, 브라우저)

 

크로스사이트 스크립트(XSS)

- 검증되지 않은 외부 입력 값을 응답의 일부로 사용하는 경우 사용자 브라우저에서 악의적인 스크립트가 실행될 수 있는 보안 약점이다. 

- 서버를 공격하지 않고 클라이언트를 공격하는 공격 패턴.

 

Reflective XSS : 공격자가 악성 스크트가 포함된 URL을 클라이언트에 노출시켜 클릭을 유도하고, 쿠키 정보를 탈취하거나 피싱 사이트, 불법 광고 사이트로 이동하게 만든다. 

Stored XSS : 공격자가 서버에 저장한 스크립트를 사용자가 열람하는 경우 스크립트가 다운로드 되어 사용자의 브라우저에서 실행한다.

DOM XSS : 자바스크립트로 DOM 객체 정보를 사용하여 Document에 write를 수행하는 경우(DOM의 구조가 바뀌는 시점) 스크립트가 사용자의 브라우저에서 실행한다.

 

데이터는 객체로 이동. 객체(Beans)의 Getter, Setter 메소드에 필터를 걸어주면 해결. 하지만, 오버헤드 발생.

 

1. 출력값에 대한 필터링

 - HTML 인코딩 처리 : 출력방식을 이용한 처리

 - XSSFiltering 처리 : 라이브러리를 이용한 처리

 

2. 입력값에 대한 필터링

 - HTML 인코딩 처리

 - XSSFiltering 처리 : 프레임워크 컴포넌트를 이용한 공통처리 방식

 

MultipartFilter

XSSFilter

MultipartResolver

HttpRequestWrapper

 

web.xml 파일

 

크로스사이트 요청위조(CSRF)

POST방식으로 데이터를 보낸다. (POST 방식으로 보내려면 form이 필요하다. method=POST 라고 명시해주어야 하기때문에) 

 

로그인 시 토큰값(CSRFToken) 부여 -> 이러한 부분은 프레임워크에서 처리되도록 하는 것이 좋다.

View, View Resolver -> CSRF Token 응답

Interceptor -> CSRF Token 검증

728x90
728x90

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

시큐어코딩 (3일차)  (0) 2020.01.17
시큐어코딩 (1일차)  (0) 2020.01.15
Comments