소프트웨어 개발 보안 또는 시큐어 코딩(Secure Coding)이란 안전한 소프트웨어 개발을 위해 소스 코드 등에 존재할 수 있는 잠재적인 보안 취약점을 제거하고, 보안을 고려하여 기능을 설계 및 구현하는 등 소프트웨어 개발 과정에서 지켜야 할 일련의 보안 활동을 말합니다. 인터넷 홈페이지나 소프트웨어 개발 시 보안 취약점을 악용한 해킹 등 내외부 공격으로부터 시스템을 안전하게 방어할 수 있도록 코딩하는 것이 여기에 해당합니다.
출처. 위키백과
쉽게 설명하자면..
도출 -> 설계 -> 구현(개발) -> 테스트 -> 릴리즈
구현(개발) 단계에서 해킹 등의 공격을 유발할 가능성이 있는 잠재적인 보안 취약점을 사전에 제기하여, 외부 공격으로부터 안전한 소프트웨어를 개발하는 기법을 말합니다.
출처. 파수닷컴
그렇다면 시큐어 코딩이 왜 필요할까요?
구분 |
설계단계 |
구현단계 |
통합단계 |
베타제품 | 제품출시 |
설계 |
1배 |
5배 |
10배 |
15배 | 30배 |
구현 |
- |
1배 |
10배 |
20배 | 30배 |
통합 |
- |
- |
1배 |
10배 | 20배 |
다음과 같이 구현단계와 제품을 출시 후인 유지 보수 단계에서 수정비용이 많이 드는 것을 볼 수 있다. 따라서 미리 시큐어 코딩을 사용한다면 수정과 같은 유지보수 비용이 줄어들 것으로 생각합니다.
출처. NIST, The Economic Impacts of Inadequate Infrasturcture for Software Testing, 2002년 5월
다음으로는 코딩 스타일을 예로 들어 안전한 코딩과 그렇지 않은 코딩을 비교하겠습니다.
- 안전하지 않은 코딩 예입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <stdio.h> #include <string.h> int main( ) { char str1[]="basic string"; char str2[40]; char str3[40]; strcpy( str2, str1 ); strcpy( str3, "good job man" ); printf( "str1: %s\n", str1 ); printf( "str2: %s\n", str2 ); printf( "str3: %s\n", str3 ); return 0; } | cs |
10번과 11번 줄에서 보이는 strcpy 함수는 NULL문자를 만나기 전까지의 문자열을 복사한다. 따라서 버퍼 오버플로우 기법에 취약한 부분이라고 할 수 있습니다. 이 부분을 파고든다면 사용자의 권한도 탈취할 수 있습니다. 따라서 안전한 코딩 방법을 따라야 합니다.
- 안전한 코딩 예입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include <stdio.h> #include <string.h> int main( ) { char str1[]= "Show me the id and password"; char str2[40]; char str3[40] = {0,}; strncpy( str2, str1, sizeof(str2) ); strncpy( str3, str2, 5 ); //str3[5] = '\0'; puts( str1 ); puts( str2 ); puts( str3 ); return 0; } | cs |
따라서 11번과 12번 줄처럼 strncpy 함수를 이용하여 문자열을 복사해야 합니다. strncpy는 문자열을 지정된 길이만큼 복사하므로 추가적인 문자열에 취약점을 드러내지 않을 것입니다.
보안 취약성을 제거하는 방법
1. 시큐어 코딩에 정통한 개발자가 코드를 한 줄씩 검사하는 방법입니다.
- 보통 수 십.. 아니 수 백만 줄 이상의 코드를 사람이 일일히 따라가는 것은 거의 불가능 하다고 생각합니다.
2. 시큐어 코딩이 가능한 솔루션(정적분석도구)을 도입하는 방법입니다.
- 최근에는 이러한 솔루션이 나오고 있다고 합니다. 또한, 시큐어 코딩은 물론 소스코드에 잠재되어 있는 오류도 탐지하기 때문에 프로그램 안정성도 크게 높일 수 있다고 합니다. 물론 이러한 방법도 완벽하지는 않겠지만 말입니다.
제 글이 도움이 되셨거나 공감이 되시는 부분이 있으셨다면, 밑에 있는 공감 버튼 한 번씩 꾸욱 눌러주시면 감사하겠습니다.
공감 버튼은 저에게 큰 도움이 됩니다. 감사합니다.
'컴퓨터 관련' 카테고리의 다른 글
파워쉘(PowerShell) 정리 [간단하게] (0) | 2016.07.10 |
---|---|
쉘 스크립트(Shell Script) 정리 (1) (0) | 2016.07.10 |
보안 용어 모음(1) (0) | 2016.07.06 |
OWASP이란? (0) | 2016.06.17 |
문자열 역순으로 출력 (0) | 2016.06.10 |
댓글