• 검색 결과가 없습니다.

펌웨어 · 소프트웨어 보안

문서에서 사이버보안 가이드 (페이지 66-69)

제2절 보안요구사항 및 보안대책

2. 펌웨어 · 소프트웨어 보안

펌웨어 및 소프트웨어를 안전하게 보호하기 위해 시큐어코딩, 난독화 기법을 적용해야 개발해야 하며, 제품 오동작, 변조를 방지하기 위해 IoT 제품의 주요 설정값 및 실행코드에 대한 무결성을 검증해야 한다. 또한, 웹 인터페이스 및 모바일 인터페이스를 안전하게 구현 하기 위한 보안대책을 적용해야 하며, Secure booting을 적용하여 부팅과정에서 펌웨어 변조 여부를 검사해야 한다.

보안대책 요약

① 시큐어코딩 적용

② 소스코드 난독화 적용

③ 실행코드 무결성 검증

④ 웹 인터페이스 보안

⑤ 모바일 인터페이스 보안

⑥ Secure booting 적용

① 시큐어코딩 적용

소프트웨어 또는 펌웨어 구현상의 오류나 개발자의 실수로 인해 최종 고객에게 배포 이후 보안약점 및 보안취약점이 존재하지 않도록 시큐어코딩을 적용해야 한다. 소스코드 보안약점 분석도구(FindBugs, Sparrow, Yasca 등)를 이용하여 소스코드에 대한 보안약점을 사전에 점검해야 하며, 소프트웨어 개발보안 가이드의 경우 프로그래밍 언어별(C, JAVA, Android 등)로 고려해야 할 아래와 같은 보안약점을 설명하고 대응하기 위한 가이드를 제시하고 있다.

•C 언어 오류 유형•

오류 유형 설명

입력데이터 검증 및 표현

프로그램 입력 값에 대한 검증 누락 또는 부적절한 검증, 데이터의 잘못된 형식지정으로 인해 발생할 수 있는 보안약점(SQL 삽입, 자원 삽입 등, 19개) 보안기능 보안기능을 적절하지 않게 구현 시 발생할 수 있는 보안약점(부적절한 인가,

중요한 자원에 대한 잘못된 권한허용 등, 17개)

시간 및 상태

동시 또는 거의 동시 수행을 지원하는 병렬 시스템 하나 이상의 프로세스가 동작하는 환경에서 시간 및 상태의 부적절 관리로 발생할 수 있는 보안약점(경쟁 조건, 제대로 제어되지 않는 재귀 등, 3개)

에러 처리 에러 미처리 또는 불충분한 처리로 에러 정보에 중요정보가 포함될 때 발생할 수 있는 보안약점(오류 메시지를 통한 정보노출, 오류상황 대응 부재 등, 3개) 코드 오류 타입 변환 오류, 자원의 부적절한 반환 등과 같이 개발자가 범할 수 있는 코딩

오류로 인해 유발되는 보안약점(널 포인터 역참조, 부적절한 자원 해제 등, 9개) 캡슐화 중요 데이터·기능성을 불충분하게 캡슐화 하였을 때, 인가되지 않는 사용자에게

데이터 누출이 가능해지는 보안약점(제거되지 않고 남은 디버그 코드 등, 2개)

•JAVA 언어 오류 유형•

오류 유형 설명

입력데이터 검증 및 표현

프로그램 입력 값에 대한 검증 누락 또는 부적절한 검증, 데이터의 잘못된 형식지정으로 인해 발생할 수 있는 보안약점(SQL 삽입, 자원 삽입, XSS 등, 26개)

보안기능 보안기능을 적절하지 않게 구현 시 발생할 수 있는 보안약점(부적절한 인가, 중요정보 평문 저장(또는 전송) 등, 24개)

시간 및 상태

동시 또는 거의 동시 수행을 지원하는 병렬 시스템 하나 이상의 프로세스가 동작하는 환경에서 시간 및 상태의 부적절 관리로 발생할 수 있는 보안약점(경쟁 조건, 제어문을 사용하지 않는 재귀함수 등, 7개)

에러 처리 에러를 처리하지 않거나, 불충분하게 처리하여 에러 정보에 중요정보가 포함될 때 발생할 수 있는 보안약점(약한 패스워드 요구조건 등, 4개)

코드 오류 타입 변환 오류, 자원의 부적절한 반환 등과 같이 개발자가 범할 수 있는 코딩 오류로 인해 유발되는 보안약점(널 포인터 역참조, 부적절한 자원 해제 등, 7개)

캡슐화 중요한 데이터·기능성을 불충분하게 캡슐화하였을 때, 인가되지 않는 사용자에게 데이터 누출이 가능해지는 보안약점(제거되지 않고 남은 디버그 코드 등, 8개)

API 오용 의도된 사용에 반하는 방법으로 API를 사용하거나, 보안에 취약한 API를 사용하여 발생할 수 있는 보안약점(DNS Lookup에 의존한 보안결정 등, 7개)

시큐어코딩 적용 여부 확인

•시큐어코딩 점검 툴을 사용한 소스코드 보안 취약점 확인

시큐어코딩 점검 툴(Sparrow)을 사용하여 메모리 누수, 널 포인트 역참조 등과 같은 실행 오류를 유발할 수 있는 소스코드 상의 문제점을 검출 후 보안취약점 제거 가능

② 소스코드 난독화 적용

소스코드 분석을 통해 민감한 정보 노출을 방지하기 위해 난독화 도구(ProGuard, Stringer, Alla tori, Zelix Klass Master 등)를 이용하여 소스코드 난독화를 적용해야 한다.

•소스코드 난독화 기법•

난독화 기법 설명

배치 난독화 프로그램에 큰 영향을 끼치지 않는 세부적인 요소들을 변형 및 제거하여, 복원된 프로그램의 내용을 부분적으로 훼손시키는 방법

데이터 난독화 데이터를 담는 변수 str을 str1, str2, str3로 나누거나 합치는 방법

제어 난독화 프로그램의 실행순서 및 흐름을 변경하는 것으로 프로그램의 문장이 묶이는 단위를 조절하는 방법

방지 난독화 알려진 디컴파일러의 역난독화 기법을 봉쇄하여 디컴파일 수행 시 프로그램이 충돌하게 만드는 방법

Proguard를 이용한 소스코드 난독화

•Proguard를 이용해 소스코드 내 클래스 및 변수를 난독화하여 분석하기 어렵도록 변조함

<소스코드 난독화 적용 전> <소스코드 난독화 적용 후>

③ 실행코드 무결성 검증

무결성 검증(verification of the integrity)은 제품이 오동작하거나 안전하지 않은 방식으로 동작하는 것을 방지하기 위해 시동 시, 사용자 요청 또는 주기적으로 IoT 제품의 중요한 설정값(configuration data)과 제품 자체(바이너리 등 제품 실행코드)의 변조를 탐지하기 위해 수행해야 한다. 일반적으로, 무결성 검증은 해시함수(SHA-256 등 알고리즘 권고)를 이용하여 설정값 및 제품 자체에 대한 원본 해시값과 무결성 검사를 요구 시점에 계산된 설정값 및 제품 자체에 대한 해시값 비교를 통해 수행된다.

문서에서 사이버보안 가이드 (페이지 66-69)

관련 문서