신뢰할 수 없는 데이터의 역직렬화 정의 송신자가 네트워크를 이용해 직렬화된 정보를 수신자에게 전달하는 과정에서 공격자가 전송한 데이터 또는 저장된 스트림을 조작할 수 있는 경우, 신뢰할 수 없는 역직렬화로 인해 무결성 침해, 원격코드실행, 서비스 거부 공격 등이 발생할 수 있는 보안약점입니다. *직렬화(Serialization)는 프로그램에서 특정 클래스의 현재 인스턴스 상태를 다른 서버로 전달하기 위해 클래스의 인스턴스 정보를 바이트 스트림으로 복사하는 작업으로, 메모리 상에서 실행되고 있는 객체의 상태를 그대로 복제해 파일로 저장하거나 수신 측에 전달하게 됩니다. *역직렬화(Deserialization)는 반대 연산으로 바이너리 파일(Binary File) 이나 바이트 스트림(Byte Stream) ..
부적절한 자원 해제 정의 프로그램의 자원(힙 메모리, 소켓 등)을 할당받아 사용을 마치고 더 이상 사용하지 않는 경우에는 적절히 반환해야 하는데, 프로그램 오류 또는 에러로 사용이 끝난 자원을 반환하지 못하는 경우에 문제가 발생할 수 있습니다. 안전한 코딩기법 자원을 획득하여 사용한 다음에는 반드시 자원을 해체 후 반환해야 합니다. 코드예제 다음은 안전하지 않은 코드예제입니다. try문 내의 코드 실행 중 오류가 발생할 경우, close() 메서드가 실행되지 않아 사용한 자원이 반환되지 않는 경우를 보여주는 코드입니다. #부적절한 자원 해제(안전X) def get_config_bad(): lines = None try: f = open('config.cfg') lines = f.readlines() ra..
코드오류 타입 변환 오류, 자원의 부적절한 반환 등과 같이 개발자가 범할 수 있는 코딩 오류로 인해 유발되는 보안약점이다. Null Pointer 역참조 정의 널 포인터 역참조는 '일반적으로 그 객체가 Null이 될 수 없다'라고 하는 가정을 위반했을 때 발생합니다. 공격자가 의도적으로 널 포인터 역참조를 발생시키는 경우, 공격자는 그 결과로 발생하는 예외상황을 이용해 추후 공격 계획에 활용할 수 있습니다. 안전한 코딩기법 None을 반환하는 함수를 사용할 때, None이 될 수 있는 데이터를 참조하기 전 해당 데이터의 값이 None 인지 검사하여 시스템 오류를 줄일 수 있습니다. 코드예제 다음은 안전하지 않은 코드 예제입니다. 파이썬에서는 포인터를 사용하지는 않지만 데이터에 대한 적절한 검사를 수행하지..