본문 바로가기
공부/KISA

취약한 API 사용 - KISA 소프트웨어 개발 보안 가이드

by Skogkatt의 개인 블로그 2020. 7. 22.
반응형

https://www.kisa.or.kr/public/laws/laws3.jsp

 

기술안내서 가이드 < 관련법령·기술안내서 < 자료실 : 한국인터넷진흥원

기술안내서 가이드 한국인터넷진흥원 기술안내서 가이드 입니다. 게시판 목록 보기 기술안내서 가이드 표 대분류 소분류 기술안내서 가이드 대상 수준 인터넷 진흥 및 이용 활성화 인터넷 진흥

www.kisa.or.kr


구현 단계 시큐어코딩 가이드 - API 오용 - 취약한 API 사용 

가. 개요

  • 취약한 API는 보안상 금지된(banned) 함수이거나, 부주의하게 사용될 가능성이 많은 API를 의미한다. 이들 범주의 API에 대해 확인하지 않고 사용할 때 보안 문제를 발생시킬 수 있다.
  • 금지된 API의 대표적인 예로는 스트링 자료와 관련된 gets(), strcat(), strcpy(), strncat(), strncpy(), sprintf() 등이 있다. 또한 보안상 문제가 없다 하더라도 잘못된 방식으로 함수를 사용할 때도 역시 보안 문제를 발생시킬 수 있다.

나. 보안대책

  • 보안 문제로 인해 금지된 함수는 이를 대체할 수 있는 안전한 함수를 사용한다. 그 예로, 위에 언급된 API 대신에 gets_s()/fgets(), strcat_s(), strcpy_s(), strncat_s(), strncpy_s(), sprintf_s()과 같은 안전한 함수를 사용하는 것이 권장된다. 또한 금지된 API는 아니지만 취약한 API의 예시로, 문자열을 정수로 변환할 때 사용하는 strtol()과 같은 함수는 작은 크기의 부호 있는 정수인 int, short, char와 같은 자료형 변환에 사용하면 범위 제한 없이 값을 평가할 수 있다.
  • 취약한 API의 분류는 일반적인 것은 아니지만 개발 조직에 따라 이를 명시한 경우가 있다면[각주:1] 반드시 준수한다.

다. 코드예제

JAVA
더보기

아래 예제에서 gets() 함수는 크기와 상관없이 입력값을 버퍼에 저장하기 때문에 버퍼 오버플로우를 유발할 수 있다.

아래 예제와 같이 gets_s() 또는 fgets() 함수를 사용하여 입력값의 크기를 제한하여 사용해야 한다.

다음 예제는 J2EE 응용 프로그램에서 프레임워크 메소드 호출 대신에 소켓을 직접 사용하고 있어, 프레임워크에서 제공하는 보안 기능을 제공받지 못한다.

타깃이 WAS로 작성될 경우 아래의 코드처럼 보안 기능을 제공하는 프레임워크 메소드인 URL Connection을 이용하여야 한다.

아래 예제는 J2EE 프로그램에서 System.exit()를 사용하고 있다. System.exit() 메소드를 호출 하는 경우 웹 애플리케이션을 실행하고 있는 컨테이너를 종료할 수 있다.

서비스 종료를 막기 위해, J2EE 프로그램에서는 System.exit() 메소드를 사용하지 않는다.

 

C#
더보기

C# 코드에서 Application.Exit()을 사용하면 일부 이벤트가 처리되지 않는다.

이벤트 처리를 위해 Application.Exit()을 사용하지 않습니다.


참고자료

  1. 마이크로소프트사의 Security Develpment Lifecycle (SDL) Banned Function Calls [본문으로]
반응형

댓글