본문 바로가기
  • RATEL.SHO
[Spring]

Secure Coding [0]

by ratelsho 2023. 5. 9.

Secure Coding 

 

  • Gartner 조사에 의하면 해킹 시도의 75% 정도는 애플리케이션 해킹
  • 정보보호/보안의 정의 : 정보 자산을 공개, 노출, 변조, 파괴, 지체/재난 등의 위협으로부터 보호하여 정보의 기밀성, 무결성, 가용성을 확보하는 것
  • 보안의 기본 요소: 무결성(Integrity), 신원 증명과 인증(Identification & Authentication), 암호화(Encryption), 부인 방지(Non-Repudiation), 권한 부여(Authorization)

OWASP(The Open Web Application Security Project)

  • 오픈소스 웹 애플리케이션 보안 프로젝트, 주로 웹에 관한 정보노출, 악성 파일 및 스크립트, 보안 취약점 들을 연구하며 10대 웹 애플리케이션의 취약점을 연도별로 발표

//OWASP Top 10(2017)

    CWE(Common Weakness Enumeration)

  • 미국 국토안보부에서 관리하는 소프트웨어 취약점 목록, 사전식으로 분류하여 나타내고 있다. 

SANS25(SysAdmin, Audit, Network, Security)

  • 산학협동 연구소인데, CWE에 리스팅된 소프트웨어 취약점 중 가장 위험한 25개의 취약점에 스코어를 부여하였다.

소프트웨어 개발 보안 방법론

  • 보안을 고려한 개발 방법론이며, 잠재적인 보안 취약점을 제거하고 정보보호를 설계/구현 할 수 있는 소프트웨어 개발 과정을 얻고자 하는 방법론

MS-SDL(Microsoft – Secure Development Lifecycle)

  • 마이크로소프트에서 자체 개발한 보안 방법론

Seven Touch Points(Gary McGraw)

  • 실무적으로 검증된 개발 보안 방법론 중 하나로써 소프트웨어 보안의 모범 사례를 소프트웨어 개발 라이프 사이클에 통합

CLASP(Comprehensive Lightweight Application Security Process)

  • 소프트웨어 개발 생명주기(SDLC) 초기 단계에 보안강화를 목적으로 하는 정형화된 방법론, 활동중심, 역할기반의 프로세스로 구성된 집합체 // 이미 운영 중인 시스템에 적용하기 좋다.

자바 웹 애플리케이션 Tiers

  • 고객티어 -> Presentation Tier -> Business Tier -> Integration Tier -> Resource Tier

세션 트래킹 (서블릿 엔진에서 세션을 유지하는 방법)

  • 1. 요청 들어오면 서블릿 엔진이 세션 객체를 생성하고 ID할당
  • 2. 서버는 요청된 페이지와 세션에 할당된 ID를 함께 보낸다..
  • 3. 브라우저에서 웹 페이지를 요청, 서블릿 엔진은 세션ID를 이용해 브라우저에 할당된 세션 객체를 확인

쿠키

  • 쿠키는 이름/값(name/value) 쌍으로 브라우저에 저장된다. 서버 측에서 웹 애플리케이션이 쿠키를 생성하고 브라우저로 전달, 클라이언트 측에서는 브라우저가 쿠키를 저장하고 웹 페이지에 접근할 때마다 쿠키를 서버로 전달, 쿠키는 브라우저에서 3년까지 유지된다. 브라우저에서 쿠키 사용을 금지 시킬 수 있기 때문에, 모든 사용자의 쿠키가 사용 가능하다고 전제할 수 없다. 쿠키는 하나 이상의 서브도메인명과 연관된다.

시큐어 코딩 기법 

  • 한국인터넷진흥원(KISA)에서 발표한 7개의 유형
  1. 입력 데이터 검증 및 표현
  • 개발자는 코딩할 때 클라이언트로부터 입력된 값을 신뢰할 수 없음을 인지하고 검증작업

을 수행해야 한다. ( Ex) SQL Injection ->  ' or 'a' = 'a )

대응방안 -> 입력 값 검증, 사용자에게 실행 관련된 최소한의 권한만 부여

  • ***MyBatis 쿼리문에서 ${ }을 사용할 경우 매개변수 값을 문자열 연결 방식으로 치환하므
  • 로 쿼리문의 구조가 변경될 가능성이 있다. MyBatis 쿼리문에서 #{ }을 사용할 경우 JDBC Prpraed Statement를 사용하게 되면 쿼리문의 구조가 변경되지 않는다
  • PreparedStatement(SQL Injection을 당하지 않기 위해서 권고, 그리고 속도가 빠름)

Statement x / PreparedStatement o

  • Ex) 크로스 사이트 스크립팅: 외부 입력 값을 충분히 검증하지 않고 응답의 일부로 사용할 때 발생하는 취약점, 주로 웹 애플리케이션에서 발생

EX) 웹 어플리케이션 취약점 중 하나로 인터넷 사용자(희생자)가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 만드는 공격

DB에 <script>alert(“hahaha”)</script>를 그대로 저장해서 불러오면 jsp페이지에서 스크립트문이 실행. //대응방안 -> CSRF 토큰 사용, 재인증 요구, 

//대응방안 xssFilter, XssPreventer 사용해서 -> 스크립트문자 변환하여 저장

// lucy-xss 사용해서 DB에 스크립트를 변환하여 저장 

//필터 씌울 때 컨트롤러에서 x 서비스단에서 o 

  • 파일 업로드 다운로드

// 악성 코드나 쉘프로그램이 서버에 업로드 되어 실행될 수 있다. , 업로드 되어 저장되는 파일의 타입, 크기, 개수, 실행 권한을 제한해야 한다. 업로드 되어 저장되는 파일은 외부에서 식별되지 않아야 한다. 다운받은 소스나 실행 파일은 무결성 검사를 실행해야 한다. 

  • 시큐어 코딩 기법 – 입력 데이터 검증 및 표현 – 숫자 Overflow

자바에서 정수는 디폴트로 int형 4바이트이다. 4바티읕로 표시 가능한 숫자의 버위는  

  • 시큐어 코딩 기법 에러 처리

에러를 처리하지 않거나 불충분하게 처리하여 시스템의 주요 정보가 노출되거나 의도하지않은 기능이 수행될 때 다음과 같은 보안 약점이 발생

  • 시큐어 코딩 기법 – 캡슐화 – 캡슐화 위배

대응방안 // • getter는 주소를 반환하는 것이 아니라 기존 데이터를 복사하여 반환하도록 수정한다.

• setter의 경우도 복사하여 데이터를 설정하도록 한다.

  • 문자열비교
  •  

 

보안 약점 진단 도구

  • FindBugs

미국 메릴랜드 대학에서 개발한 정적 분석 open source 도구, 자바 바이트 코드를 분석하여 버그 패턴을 찾는 정적 분석 도구, 코드 내부의 잠재적인 에러를 4개 등급(scariest, scary, troubling, concern)으로 구분하여 탐지, Stand-alone 버전도 있으며, Eclipse, NetBeans, IntelliJ IDEA, Gradle, Hudson,

Maven 등의 Plug-in으로 설치가능

  • PMD

자바 코드를 분석하여 잠재적인 문제를 찾아주는 도구이다. 애플리케이션 코드 내에 존재하는 잠재적 이슈를 검색하는 오픈소스 정적 분석 도구, 약어가 다양하다 Programming Mistake Detector, Project Mess Detector, Program meets Deadline, 내장된 규칙(Rule Set)을 적용할 수 있으며 커스텀 규칙(Custom Rule Set)도 적용가능하다.

• 다음과 같은 결함이나 잠재 결함을 검색한다.

• 사용되지 않는 로컬 변수나 함수, 객체와 같은 죽은 코드

• 코드가 없는 try ~ catch, if 문, switch 문

• 중복된 코드

  • Lapse+

OWASP LAPSE Project로 개발된 진단도구이다.