IT 그리고 정보보안/Knowledge base

안전행정부 시큐어코딩 43개 기준

plummmm 2021. 4. 16. 05:47
반응형

1. 기본 개념

사이버공격의 주요 원인이 소프트웨어 개발 시에 보안에 관련된 구현이 전혀 되어 있지 않다는 점에 착안하여 행정안전부에서 개발보안(시큐어 코딩)에 대한 부분을 의무화하는

「정보시스템 구축운영 지침」 개정안을 추진함과 동시에 그에 관련된 시큐어 코딩안

43개를 발표한 것이다.

 

 

2.「정보시스템 구축운영 지침」 절차 및 규정

2012.12 부터 행정기관 등에서 추진하는 개발비 40억 원 이상 정보화사업에 소프트웨어 개발보안 적용을 의무화하고, 단계적으로 의무 대상을 확대하여 ‘15년에는 감리대상 전 정보화 사업에 소프트웨어 개발보안을 적용한다.

 (12.12) 40억원 이상 → (14.1) 20억원 이상 → (15.1) 감리대상 전 사업

-, 상용 소프트웨어는 소프트웨어 개발보안 적용대상에서 제외된다.

 

소프트웨어 개발 사업자가 반드시 제거해야 할 보안약점은 SQL 삽입, XSS  43개 이다.

감리법인은 정보시스템 감리시 검사항목에 보안약점 제거여부를 반드시 포함하여야 한다.

 

* 감리법인은 효과적인 보안약점 진단을 위해 진단도구를 사용할 경우

국정원장이 인증한 보안약점 진단도구를 사용하여야 한다.(14.1부터 적용)

 

* 또한 감리법인은 개발보안분야 감리시 전문성 제고를 위해 행정안전부

장관이 자격을 부여한 개발보안 진단원을 우선적으로 배치할 수 있다.

 

* 진단원이 되기 위해서는 소프트웨어 개발경력 6년이상 또는 소프트웨어

보안약점 진단경력 3년 이상인 자로서 진단원 양성교육 40시간을

이수하여야 한다.                                         

 

 

3. 소프트웨어 시큐어 코딩 필수 항목 (43)

3-1. 입력 데이터 검증 및 표현

프로그램 입력값에 대한 검증 누락, 부적절한 검증, 데이터의 잘못된 형식 지정으로 인해 발생하는 보안 약점

 

1) SQL 삽입

사용자의 입력값 등 외부 입력값이 SQL 쿼리에 삽입되어 공격

자가 쿼리를 조작해 공격할 수 있는 보안약점

 

2) 자원 삽입

외부 입력값에 대한 검증이 없거나 혹은 잘못된 검증을 거쳐서

시스템 자원에 접근하는 경로 등의 정보로 이용될 때 발생하는 보안약점

 

3) XSS

검증되지 않은 외부 입력값에 의해 브라우저에서 악의적인 코드가 실행되는 보안약점

 

4) 운영체제 명령어 삽입

운영체제 명령어를 구성하는 외부 입력값이 적절한 필터링을 거치지 않고 쓰여져서 공격자가 운영체제 명령어를 조작할 수 있는 보안약점

 

5) 위험한 형식 파일 업로드

파일의 확장자 등 파일형식에 대한 검증없이 업로드를 허용하여 발생하는 보안약점

 

6) 신뢰되지 않는 URL 주소로 자동 접속 연결

사용자의 입력값 등 외부 입력값이 링크 표현에 사용되고, 이 링크를 이용하여 악의적인 사이트로 리다이렉트(redirect)되는 보안약점

 

7) XQuery 삽입

사용자의 입력값 등 외부 입력값이 XQuery 표현에 삽입되어 악의적인 쿼리가 실행되는 보안약점

 

8) XPath 삽입

외부 입력값이 XPath 표현에 삽입되어 악의적인 쿼리가 실행되는 보안약점

9) LDAP 삽입

검증되지 않은 입력값을 사용해서 동적으로 생성된 LDAP문에 의해 악의적인 LDAP 명령이 실행되는 보안약점

 

10) 크로스사이트 요청 위조

검증되지 않은 외부 입력값에 의해 브라우저에서 악의적인 코드가 실행되어 공격자가 원하는 요청(Request)이 다른 사용자(관리자 등)의 권한으로 서버로 전송되는 보안약점

 

11) 디렉토리 경로 조작
지정된 경로 밖의 파일시스템 경로에 접근하게 되는 보안약점

 

12) HTTP 응답분할

사용자의 입력값 등 외부 입력값이 HTTP 응답헤더에 삽입되어 악의적인 코드가 실행되는 보안약점

 

13) 정수 오버플로우

정수를 사용한 연산의 결과가 정수값의 범위를 넘어서는 경우 프로그램이 예기치 않은 동작될 수 있는 보안약점

 

14) 보호메커니즘을 우회할수 있는 입력값 변조

사용자에 의해 변경될 수 있는 값을 사용하여 보안결정(인증/인가/권한부여 등)을 수행하여 보안 메커니즘이 우회될 수 있는 보안약점

 

 

3-2. 보안 기능

인증, 접근제어, 기밀성, 암호화, 권한 관리 등을 적절하지 않게 구현시 발생할 수 있는 보안 약점

 

1) 적절한 인증 없는 중요 기능 허용

적절한 인증없이 중요정보(계좌이체 정보, 개인정보 등)를 열람

(또는 변경)할 수 있게 하는 보안약점

 

2) 부적절한 인가

적절한 접근제어 없이 외부 입력값을 포함한 문자열로 서버자 원에 접근(혹은 서버 실행 인가)을 할 수 있게 하는 보안약점

 

3) 중요한 자원에 대한 잘못된 권한설정

중요자원(프로그램 설정, 민감한 사용자 데이터 등)에 대한 적절한 접근권한을 부여하지 않아, 의도하지 않는 사용자에 의해 중요정보가 노출수정되는 보안약점

 

4) 취약한 암호화 알고리즘 사용

중요정보(패스워드, 개인정보 등)의 기밀성을 보장할 수 없는 취약한 암호화 알고리즘을 사용하여 정보가 노출될 수 있는 보안약점

 

5)사용자 중요정보 평문 저장(또는 전송)

중요정보(패스워드, 개인정보 등) 저장(또는 전송)시 암호화 하지 않아 공격자에게 누출될 수 있는 보안약점

 

6) 하드코드된 패스워드

소스코드내에 비밀번호를 하드코딩함에 따라 관리자 비밀번호가 노출되거나, 주기적 변경 등 수정(관리자 변경 등)이 용이하지 않는 보안약점

 

7) 충분하지 않은 키 길이 사용

데이터의 기밀성, 무결성 보장을 위해 사용되는 키의 길이가 충분하지 않아 기밀정보 누출, 무결성이 깨지는 보안약점

 

8) 적절하지 않은난수 값 사용

예측 가능한 난수사용으로 공격자로 하여금 다음 숫자 등을 예상하여 시스템 공격이 가능한 보안약점

 

9) 패스워드 평문 저장

기밀정보인 비밀번호를 암호화하지 않아 노출될 수 있는 보안 약점

 

10) 하드코드된 암호화 키

소스코드내에 암호화키를 하드코딩 하는 경우, 향후 노출될 수 있으며, 키 변경 등 수정이 용이하지 않는 보안약점

11) 취약한 패스워드 허용

비밀번호 조합규칙(영문, 숫자, 특수문자 등) 및 길이가 충분하지 않아 노출될 수 있는 보안약점

12) 사용자 하드디스크에 저장되는 쿠키를 통한 정보노출

쿠키(세션 ID, 사용자 권한정보 등 중요정보)를 사용자 하드디스크에 저장함으로써 개인정보 등 기밀정보가 노출될 수 있는 보안약점

 

13) 보안속성 미적용으로 인한 쿠키 노출

쿠키에 보안속성을 적용하지 않을 경우, 쿠키에 저장된 중요데이터가 공격자에 노출될 수 있는 보안약점

 

14) 주석문 안에 포함된 패스워드 등 시스템 주요정보

소스코드내의 주석문에 비밀번호가 하드코딩되어 비밀번호가 노출될 수 있는 보안약점

 

15) 솔트 없이 일방향 해쉬 함수 사용

공격자가 솔트없이 생성된 해쉬값을 얻게 된 경우, 미리 계산된 레인보우 테이블을 이용하여 원문을 찾을 수 있는 보안약점

 

16)무결성 검사 없는 코드 다운로드

원격으로부터 소스 코드 또는 실행파일을 무결성 검사없이 다운로드 받고 이를 실행하는 경우 공격자가 악의적인 코드를 실행 할 수 있는 보안약점

 

 

3-3. 시간 및 상태

거의 동시 수행을 지원하는 병렬 시스템, 하나 이상의 프로세스가 동작되는 환경에서 시간 및 상태를 부적절하게 관리하여 발생할 수 있는 보안 약점

 

1) 경쟁조건: 검사시점과 사용시점(TOCTOU)

멀티 프로세스에서 자원을 검사하는 시점과 사용하는 시점이 달라서 발생하는 보안약점

 

2) 제어문을 사용하지 않는 재귀함수

적절한 제어문 사용이 없는 재귀함수에서 무한재귀가 발생하는 보안약점

 

 

3-4. 에러 처리

에러를 처리하지 않거나, 불충분하게 처리하여 에러정보에 중요정보(시스템 등)가 포함될 때 발생할 수 있는 보안 약점

 

1) 오류메시지 통한 정보노출

개발시 활용을 위한 오류정보의 출력메시지를 배포될 버전의 SW에 포함시킬 때 발생하는 보안약점

 

2) 오류상황 대응 부재

시스템에서 발생하는 오류상황을 처리하지 않아 프로그램 다운 등 의도하지 않은 상황이 발생할 수 있는 보안약점

 

3) 적절하지않은 예외처리

예외에 대한 부적절한 처리로 인해 의도하지 않은 상황이 발생 될 수 있는 보안약점

 

 

3-5. 코드오류

타입변환 오류, 자원(메모리 등)의 부적절한 반환 등과 같이 개발자가 범할 수 있는 코딩오류로 인해 유발되는 보안약점

 

1) (Null) 포인터 역참조

Null로 설정된 변수의 주소값을 참조했을 때 발생하는 보안약점

 

2) 부적절한 자원 해제

사용된 자원을 적절히 해제 하지 않으면 자원의 누수 등이 발생하고, 자원이 모자라 새로운 입력에 처리 못하게 되는 보안약점

 

 

3-6. 캡슐화

중요한 데이터 또는 기능성을 불충분하게 캡슐화 하였을 때 인가되지 않은 사용자에게 데이터 누출이 가능해지는 보안약점.

 

1) 잘못된 세션에 의한 데이터 정보 노출

잘못된 세션에 의해 권한 없는 사용자에게 데이터 노출이 일어날 수 있는 보안약점

 

2) 제거되지 않고 남은 디버그 코드

디버깅을 위해 작성된 코드를 통해 권한 없는 사용자 인증우회(또는 중요중보)접근이 가능해지는 보안약점

 

3) 시스템 데이터 정보노출

사용자가 볼 수 있는 오류 메시지나 스택 정보에 시스템 내부 데이터나 디버깅 관련 정보가 공개되는 보안약점

 

4) Public 메소드부터 반환된 Private 배열

private로 선언된 배열을 public으로 선언된 메소드를 통해 반환(return)하면, 그 배열의 레퍼런스가 외부에 공개되어 외부에서 배열의 수정될 수 있는 보안약점

 

5) Private 배열에 Public 데이터 할당

public으로 선언된 데이터 또는 메소드의 인자가 private 선언된 배열에 저장되면, private 배열을 외부에서 접근할 수 있게 되는 보안약점

 

 

3-7. API 오용

의도된 사용에 반하는 방법으로 API를 사용하거나, 보안에 취약한 API를 사용하여 발생할 수 있는 보안약점

 

1) DNS lookup에 의존한 보안결정

 

DNS는 공격자에 의해 DNS 스푸핑 공격 등이 가능함으로 보안결정을 DNS 이름에 의존할 경우, 보안결정 등이 노출되는 보안약점

 

 

참고 문서: 120517+참고(정보보호정책과)+SW개발보안+의무화_관련_지침_행정예고

반응형

'IT 그리고 정보보안 > Knowledge base' 카테고리의 다른 글

암호학(Cryptography) 개요  (0) 2021.04.16
블루투스 (Bluetooth) 기본 개념  (0) 2021.04.16
SQL Injection 기초  (0) 2021.04.16
CWE/SANS TOP 25  (0) 2021.04.16
OWASP top 10  (0) 2021.04.16