1 / 53

Secure Coding

Secure Coding. 서울여자대학교 SWING 김고은. 목차. Secure Coding 이란 ? 소프트웨어 개발 생명 주기 Secure Coding 의 필요성 Buffer OverFlow 코드 분석 Memory Map Secure Coding 을 위한 정부와 기업의 노력 Secure Code Converter 소개. Secure Coding?. 1. Secure Coding?. 잠재적 보안 위협 x 안전한 소프트웨어. 1-1. 소프트웨어 개발 생명 주기 (SLDC). 요구사항 분석.

darrin
Download Presentation

Secure Coding

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Secure Coding 서울여자대학교 SWING 김고은

  2. 목차 • Secure Coding 이란? • 소프트웨어 개발 생명 주기 • Secure Coding의 필요성 • Buffer OverFlow • 코드 분석 • Memory Map • Secure Coding을 위한 정부와 기업의 노력 • Secure Code Converter 소개

  3. Secure Coding?

  4. 1. Secure Coding? 잠재적 보안 위협 x안전한 소프트웨어

  5. 1-1. 소프트웨어 개발 생명 주기(SLDC) 요구사항 분석 설계 구현 테스트 유지보수

  6. 1) 요구사항 분석 Requirements Specification 요구사항명세서 기능 제약조건 목표 시간 인력 예산

  7. 2) 설계 Design 제안 시스템의 청사진을 그리는 단계

  8. 3) 구현 implementation  소스코드 작성 데이터베이스 개발

  9. 4) 테스트 Testing 검증 단계 요구 사항 소프트웨어 완성도 증가 설계 구현 검사 단계 오류 취약점

  10. 5) 유지보수 Support / Maintenance  프로그램 오류를 시정하거나 변경사항을 적용하는 등의 사후 관리

  11. 1-1. SW 개발 주기 요구사항 분석 설계 구현 테스트 유지보수

  12. 1-2. Secure Coding의 필요성 비용 절감 SW 개발단계별 결함 수정비용 분석 [NIST, The Economic Impacts of Inadequate Infrasturcture for Software Testing, 2002년 5월]

  13. 1-2. Secure Coding의 필요성 비용 절감 SW 개발단계별 결함 수정비용 분석

  14. 1-2. Secure Coding의 필요성 보안 취약점 사전 대응

  15. 1-2. 내재된 보안 취약점들

  16. Buffer OverFlow?

  17. 2-1. Buffer OverFlow란? 메모리를 다루는 데에 오류가 발생하여 잘못된 동작을 하는 프로그램 취약점

  18. 2-1. 안전하지 않은 코드의 예 [C]

  19. 2-2. 영역 별 메모리 구조 주소 memory 00000000 거꾸로 쌓임 코드자체 코드 전역변수 데이터 동적 할당 힙 지역변수 FFFFFFFF 스택

  20. 2-2. 메모리 구조와 스택 영역 dO_auth() 주소 memory 00000000 코드자체 코드 전역변수 데이터 Main() 동적 할당 char password[4] inti inttoken 지역변수 힙 Return address Return address char*buf Intargc, char*argv[] 지역변수 매개변수 매개변수 스택 FFFFFFFF

  21. 2-1. 안전하지 않은 코드의 예 [C]

  22. 2-1. 안전하지 않은 코드의 예 [C]

  23. 2-1. 안전하지 않은 코드의 예 [C]

  24. 2-1. 안전하지 않은 코드의 예 [C] 41 41 41 41 00 00 00 00 00 00 00 00 41 41 41 41 41 41 41 41 33 33 33 33 8byte bffff294 char password[4] bffff298 int i inttoken bffff29C

  25. 2-1. 안전하지 않은 코드의 예 [C]

  26. 2-1. 안전한 코드의 예 [C]

  27. 2-1. 안전한 코드의 예 [C]

  28. Memory Map

  29. 2-2. 실습코드 적용 메모리 구조 intdo_auth ( char *buf ) { inttoken=0; inti=0; char password[4]; strcpy(password, buf); if(strcmp(password, “ssap”)==0) token = TOKEN; return token; } intmain ( intargc, char *argv[] ) { if(do_auth(argv[1])==TOKEN){ printf(“PASSED\N”); } else { print(“FAILE\N”); } } intdo_auth ( char *buf ) { inttoken=0; inti=0; char password[4]; strcpy(password, buf); if(strcmp(password, “ssap”)==0) token = TOKEN; return token; } intmain ( intargc, char *argv[] ) { if(do_auth(argv[1])==TOKEN){ printf(“PASSED\N”); } else { print(“FAILE\N”); } } 주소 memory 00000000 동적메모리할당 intdo_auth (…) … int main() … 코드 charpassword[4] inti inttoken char *buf Intargc, char * argv[] FFFFFFFF

  30. 2-2. 실습코드 적용 메모리 구조 주소 memory intdo_auth ( char *buf ) { inttoken=0; inti=0; char password[4]; strcpy(password, buf); if(strcmp(password, “ssap”)==0) token = TOKEN; return token; } intmain ( intargc, char *argv[] ) { if(do_auth(argv[1])==TOKEN){ printf(“PASSED\N”); } else { print(“FAILE\N”); } } 00000000 intdo_auth (…) … int main() … 동적메모리할당 코드 charpassword[4] inti inttoken char *buf Intargc, char * argv[] FFFFFFFF

  31. 2-2. 실습코드 적용 스택 영역 Detail 00000000 intdo_auth(char *buf) { inttoken=0; inti=0; char password[4]; strcpy(password, buf); … } intmain(intargc, char *argv[]){ if(do_auth(argv[1])==TOKEN) printf(“PASSED\N”); … } bffff29C bffff298 bffff294 bffff2b0 코드 STACK char password[4] inti inttoken 00 00 00 00 00 00 00 00 00 00 00 00 지역변수 Return address a8 88 04 08 2d f4 ff bf char *buf 함수인자 FFFFFFFF 주소 memory

  32. password: AAAAAAAA3333 OVERFLOW BUFFER! 2-2. Buffer OverFlow 41 41 41 41 41 41 41 41 33 33 33 33 … 4byte < 00000000 intdo_auth(char *buf) { inttoken=0; inti=0; char password[4]; strcpy(password, buf); … } intmain(intargc, char *argv[]){ if(do_auth(argv[1])==TOKEN) printf(“PASSED\N”); … } 코드 char password[4] inti inttoken 지역변수 STACK 41 41 41 41 41 41 41 41 33 33 33 33 00 00 00 00 00 00 00 00 00 00 00 00 Return address a8 88 04 08 char *buf 함수인자 2d f4 ff bf FFFFFFFF 주소 memory

  33. 2-2. Buffer OverFlow ① 할당된 영역 넘치게 쓰기 41 41 41 41 41 41 41 41 33 33 33 33 … 4byte < ② token값 덮어쓰기 ③ Passed 출력 OVERFLOW BUFFER! char password[4] inti inttoken STACK 지역변수 41 41 41 41 41 41 41 41 33 33 33 33 00 00 00 00 00 00 00 00 00 00 00 00 Return address a8 88 04 08 char *buf 함수인자 FFFFFFFF 2d f4 ff bf 주소 memory

  34. BOF (feat. Return address)

  35. Buffer OverFlow통한 악성코드 실행 ① 할당된 영역 넘치게 쓰기 31 c0 b0 02 cd 80 85 c0 … 90 90 90 90 … d8 f0 ff bf 204< ② 악성 코드 삽입 BFFFF0D8 ③ Return Address 덮어쓰기 ④ 악성 코드 실행 OVERFLOW BUFFER! STACK charrcv_buffer[200] intnbytes 지역변수 31 c0 b0 02 cd 80 85 c0 … 90 90 90 90 90 90 31 c0 b0 02 cd 80 85 c0 … 90 90 90 90 90 90… 악성코드 Shell code Return address a8 88 04 08 d8 f0 ff bf 04 00 00 00 FFFFFFFF 주소 memory

  36. Secure Coding을 위한 정부와 기업의 노력

  37. 3. 소프트웨어 개발보안 체계

  38. 3. Secure coding 의무화 • 2012년 시큐어코딩 도입 전 공공기관 의무화 • 안전행정부, 한국인터넷진흥원 ‘시큐어코딩 제도 확대 적용’ 방안 마련 38

  39. 3. 안전행정부 Secure Coding GuideLine • 행정기관 및 공공기관 정보시스템 구축&운영 지침에 따라 정보화 사업 수행시 안전한 SW 개발을 위한 시큐어코딩 기법 제시 • 현재 안전행정부 시큐어코딩 적용 대상언어 : Java, C, 안드로이드

  40. 3. 시큐어코딩 솔루션 기업 사례 40

  41. Secure Code Converter

  42. 4. Secure Code Converter 동작과정 • 테스트할 파일들을 컨버터를 통해 열게 된다. • 실행파일로 만든 컨버터는 DB를 거쳐 파일을 검사한다. • 그 후 실행파일인 컨버터는 안전한 파일을 생성하게 된다.

  43. 4. Secure Code Converter DB구성

  44. 4. Secure Code Converter 실행과정

  45. 4. Secure Code Converter 실행과정

  46. 4. Secure Code Converter 실행과정

  47. 4. Secure Code Converter 실행과정

  48. 4. Secure Code Converter 실행과정

  49. 4. Secure Code Converter 실행과정

  50. 4. Secure Code Converter 실행과정

More Related