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 속성을 설정할 경우 같은 아이디와 서명을 사용함으로써 다른 응용프로그램이 해당 프로그램의 정보에 접근 가능 - 의도적 및 비의도적으로 해당 프로그램의 무결성과 보안성이 침해 가능 |
코딩기법 | - 공유 아이디 설정을 하지 않는 것이 바람직 |
'TOPCIT > TOPCIT교재' 카테고리의 다른 글
1. IT비즈니스 개념 - 황선환 (1) | 2022.08.14 |
---|---|
VI. 데이터 보안 - 황선환 (0) | 2022.08.11 |
VIII. 네트워크보안 이해하기-(안혜진) (0) | 2022.08.09 |
VII. 시스템 아키텍쳐 보안(손선희) (0) | 2022.08.09 |
IV. 보안관리체계와 표준 - 문경숙 (0) | 2022.08.08 |