[TOPCIT목차]

 

1. 시큐어 코딩의 정의 및 필요성

) 시큐어 코딩 정의

  • 소프트웨어 개발 단계(SDLC, Software Development Life Cycle)에서 보안 약점을 제거함으로써 소프트웨어의 취약점과 해킹의 위험성을 줄여주는 방어적 프로그래밍 기법

) 시큐어 코딩의 필요성

  • 사이버 공격의 약 75%가 SW 자체의 보안 취약점을 악용하는 공격으로 분석됨
  • 개발단계에서 수정하는 비용이 제품 출시 이후 수정하는 비용보다 수십 배의 비용을 절감할 수 있는 것으로 분석됨
  • 사이버 공격을 예방 및 대응하기 위해서는 제품 출시 이전 단계인 SW 개발단계에서 보안 취약점을 제거하는 것이 효과적인 방법으로 부각

 

2. 시큐어 코딩 주요내용

) SW 보안약점과 보안 취약점

보안약점 (Weakness) - 소프트웨어의 결함, 오류, 버그 등 설계, 구현 단계에서 발생하는 에러로 소프트웨어의 취약점으로 이어실 수 있는 원인
- CVVE(Common Weakness Enumeration)
보안취약점(Vulnerability) - 해커가 시스템이나 네트워크에 접근하여 사용할 수 있는 소프트웨어의 실수로, 접근 가능한 보안약점을 악용하여 Exploit 될 수 있는 것
- CVE(Common Vulnerabilities and Exposures)

 

) 시큐어 개발 생명주기(Secure SDLC)

  • 시큐어 코딩 개발 생명주기

  • 시큐어 코딩 생명주기 설명
단계 설명
요구사항 정의 단계 - 프로젝트 및 SW 특성에 따른 보안 목표를 정의하고, 잠재적 위협에 따른 보안 취약점 및 영향도를 분석하는 단계
- SW 개발을 위한 보안 요구사항을 도출
분석/설계 단계 - 전체 아키텍처 설계과정에서 보안 아키텍처를 설계하고 보안 요구사항을 정의하는 단계
- 안전한 보안 시스템 구축을 위한 개발자 교육 실시 및 보안 테스트 계획을 설계
코딩 단계 - 보안 관점에서 사용 프로그래밍 언어의 약점과 강점을 파악하여 코딩 규칙을 정의하고 개발된 코드에 대한 정적 단위 테스트 실시 및 사전 정의한 시큐어 코딩 규칙의 준수 여부를 검증
- 상용 패키지를 이용하는 경우 해당 패키지에서 발견된 보안 취약점 내용 및 조치 내용을 점검
테스팅 단계 - 개발된 프로그램에 대한 동적 단위 테스트를 실시하고, 보안 적용된 응용 프로그램의 사용성 테스트를 수행
- 인프라 및 응용 프로그램에 대해 시스템의 독립적인 취약성을 점검 수행하여 보안 개선사항율 도출하여 적용
유지보수 단계 - SW 변경관리 절차에 따라 변경 시 보안 영향도 평가를 수행
- 주기적인 취약성 점검 수행 및 보안 개선사항을 도출하여 적용

 

3. 시큐어 코딩 주요기법

) JAVA 시큐어 코딩 주요기법

1) SOL 삽입 공격 대응을 위한 시큐어 코딩 기법

  • SQL 삽입 보안 취약점

  • SQL 삽입 공격 대응
구분 설명
공격개요 - 데이터베이스(DB)와 연동된 웹 응용프로그램에서 입력된 데이터에 대한 유효성 검증을 하지 않을 경우
- 공격자가 입력폼 및 URL 입력란에 SOL 문을 삽입하여 DB로부터 정보를 열람하거나 조작할 수 있는 보안약점
코딩기법 - PreparedStatement 객체 등을 이용하여 DB에 컴파일 된 쿼리문(상수)을 전달하는 방법
- PreparedStatement를 사용하는 경우에는 DB 쿼리에 사용되는 외부 입력값에 대하여 특수문자 및 쿼리 예약어를 필터링
- 스트러츠(Struts), 스프링(Spring) 등과 같은 프레임워크를 사용하는 경우에는 외부 입력값 검증모듈 및 보안모듈을 상황에 맞추어 적절하게 시용

 

2) 크로스사이트 스크립팅(XSS) 공격 대응을 위한 시큐어 코딩 기법

  • 크로스사이트 스크립팅(XSS) 보안 취약점

  • 크로스사이트 스크립팅(XSS) 공격 대응
구분 설명
공격개요 - 웹 페이지에 악의적인 스크립트를 포함시켜 사용자 측에서 실행되게 유도
- 검증되지 않은 외부 입력이 동적 웹페이지 생성에 사용될 경우, 전송된 동적 웹페이지를 열람하는 접속자의 권한으로 부적절한 스크립트가 수행되어 정보유출 등의 공격을 유발
코딩기법 - 외부 입력값에 스크립트가 삽입되지 못하도록 문자변환 함수 또는 메소드를 사용하여 〈〉 & “등을 < > & " 로 치환
- HTML 태그를 허용하는 게시판에서는 허용되는 HTML 태그들을 화이트리스트로 만들어 해당 태그만 지원

 

3) 운영체제 명령어 삽입 공격 대응을 위한 시큐어 코딩 기법

  • 운영체제 명령어 삽입 보안 취약점

  • 운영체제 명령어 삽입 공격 대응
구분 설명
공격개요 - 적절한 검증절차를 거치지 않은 사용자 입력값이 운영체제 명령어의 일부 또는 전부로 구성되어 실행되는 경우
- 의도하지 않은 시스템 명령어가 실행되어 부적절하게 권한이 변경되거나 시스템 동작 및 운영에 악영향
코딩기법 - 웹 인터페이스를 통해 서버 내부로 시스템 명령어를 전달시키지 않도록 응용프로그램을 구성
- 외부에서 전달되는 값을 검증 없이 시스템 내부 명령어로 사용하지 않을것
- 외부 입력에 따라 명령어를 생성하거나 선택이 필요한 경우에는 명령어 생성에 필요한 값들을 미리 지정해 놓고 외부 입력에 따러 선택하여 사용

 

4) 위험한 형식의 파일 업로드 공격 대응을 위한 시큐어 코딩 기법

  • 위험한 파일의 파일 업로드 보안 취약점

  • 위험한 형식의 파일 업로드 공격 대응
구분 설명
공격개요 - 서버 측에서 실행될 수 있는 스크립트 파일(asp, jsp, php 파일 등)이 업로드 가능하고 파일을 공격자가 웹을 통해 직접 실행시길 수 있는 경우
- 시스템 내부명령어를 실행하거나 외부와 연결하여 시스템을 제어할 수 있는 보안약점
코딩기법 - 화이트 리스트 방식으로 허용된 확장자만 업로드를 허용
- 파일 실행여부를 설정할 수 있는 경우 실행 속성을 제거

 

) C 시큐어 코딩 주요기법

1) 메모리 버퍼 오버플로우 공격 대응을 위한 시큐어 코딩 기법

구분 설명
공격개요 - 연속된 메모리 공간을 사용하는 프로그램에서 할당된 메모리의 범위를 넘어선 위치에 자료를 읽거나 쓰려고 할 때 발생
- 프로그램의 오동작을 유발시키거나, 악의적인 코드를 실행시킴으로써 공격자 프로그램을 통제할 수 있는 권한을 획득
코딩기법 - 프로그램상에서 메모리 버퍼를 사용할 경우 적절한 버퍼의 크기를 설정하고, 설정된 범위의 메모리 내에서 올바르게 읽거나 쓸 수 있게 통제
- 문자열 저장 시 널(NULL) 문자로 종료하지 않으면 의도하지 않은 결과를 가져오게 되므로 널 문자를 버퍼 범위 내에 삽입하여 널 문자로 종료

 

2) 포멧 스트링 삽입 공격 대응을 위한 시큐어 코딩 기법

구분 설명
공격개요 - 외부로부터 입력된 값을 검증하지 않고 입·출력 함수의 포맷 문자열로 그대로 사용하는 경우 발생할 수 있는 보안약점
- 공격자는 포맷 문자열을 이용하여 취약한 프로세스를 공격하거나 메모리 내용을 읽거나 쓸 수 있음
- 공격자는 취약한 프로세스의 권한을 취득하여 임의의 코드를 실행 가능
코딩기법 - printf( ), snprintf( ) 등 포맷 문자열을 사용하는 함수를 사용할 때는 사용자 입력값을 직접적으로 포맷 문자열로 사용하거나 포맷 문자열 생성에 포함시키지 말것
- 포맷문자열을 사용하는 함수에 사용자 입력값을 사용할 때는 사용자가 포맷 스트링을 변경할 수 있는 구조로 쓰지 말 것

 

) Android-JAVA 시큐어 코딩 주요기법

1) 외부에서 접근이 가능한 컴포넌트 공격 대응을 위한 시큐어 코딩 기법

구분 설명
공격개요 - 안드로이드 애플리케이션에서 manitest.xml 파일에 android:exported="true로 설정되어 있는 컴포넌트는 외부에서 해당 컴포넌트에 인텐트를 전달하여 활성화 가능
- 해당 컴포넌트가 원래 의도하지 않았던 상황에서 수행을 시작함으로써 시스템 보안에 침해 유발
코딩기법 - 컴포넌트에 대한 접근권한을 외부에 제공하지 않는 것이 바람직

 

2) 공유 아이디에 의한 접근통제 통과 공격 대응을 위한 시큐어 코딩 기법

구분 설명
공격개요 - Manifest.xml 파일의 manifest 태그에 android:sharedUserld 속성을 설정할 경우 같은 아이디와 서명을 사용함으로써 다른 응용프로그램이 해당 프로그램의 정보에 접근 가능
- 의도적 비의도적으로 해당 프로그램의 무결성과 보안성이 침해 가능
코딩기법 - 공유 아이디 설정을 하지 않는 것이 바람직

 

 

+ Recent posts