티스토리 뷰

Security/보안 지식

취약점(vulnerability)

on1ystar 2019. 1. 20. 04:38
728x90
반응형
본 글의 목적은 제가 공부한 내용을 바탕으로 정리하면서 저와 같이 공부하시는 분 들을 위함입니다. 때문에 부족한 부분이 있을 수 있고, 잘못된 부분이 있을 수 있습니다. 만약 있을 경우, 생각을 고칠 수 있도록 저에게 알려주시면 정말 감사하겠습니다 !!



취약점의 기본 정의는 이렇습니다.

취약점은 공격자가 시스템의 정보 보증을 낮추는데 사용되는 약점이다.( 위키백과 )

좀 더 구체적으로 설명하자면, 소프트웨어의 결함이나 체계, 설계상의 허점을 공격자가 악용할 수 있는 부분입니다.


(출처 : [2014 CodeEngn Conference 10] 심준보 - 급전이 필요합니다)

취약점을 잘 이해하기 위해서는 위의 포함관계를 알아야 합니다.

먼저 어떤 프로그램이 있습니다. 프로그램을 개발한 개발자는 자신이 원하는 프로그램의 동작 방식이 있을겁니다. 하지만 어떠한 경위로 인해 개발자가 원하지 않는 방향으로 프로그램이 동작을 하면 버그가 발생했다고 합니다.

이 버그의 범위는 매우 넓습니다. 개발자의 실수로 인한 버그에서 부터 사용자의 단순한 헛손질까지 모두 포함하는 개념입니다.

버그 중에서 개발자가 생각한 범위 이외의 부분이 바로 예외(Exception) 입니다. 그리고 이 예외 부분에서 프로그램간에, 혹은 시스템이나 운영체제까지 충돌이 발생해 시스템이 멈추는 상황을 Crash 라고 합니다.

보통 프로그램에 crash가 발생해 프로그램이 종료되면 '프로그램이 죽었다, 뻗었다'라는 표현을 사용합니다. 그런데 사실 완전히 종료되는게 아니라 중단을 시켜놓고 그 부분까지의 메모리를 유지해 놓습니다. 그러면 이를 dump에 넣고 분석을 하게 되는 것입니다. 

이 crash는 생각보다 쉽게 발생할 수 있습니다. 그리고 이를 취약점으로 이용할 수도 있습니다.

예를들어 회원가입 양식란에 이름을 입력하는 부분을 만든다고 생각해 보겠습니다. 개발자는 이름이 아무리 길어도 50자는 안넘어 가겠다고 생각하고 50자의 알파벳, 한글로 제한을 두었습니다. 그리고 이 예외를 따로 처리하지 않거나 허술하게 처리했습니다. 

하지만 어떤 사람(주로 공격자)은 이 입력 부분에 엉뚱한 숫자들의 조합이나, 50자를 훨씬 넘어가는 'A' 5천 자를 넣는 행위를 하게 됩니다. 그랬더니 웹 페이지가 중단되거나 이상한 에러가 발생해 버립니다. 이때 Crash가 발생했다는 것을 알 수 있습니다.

그러면 공격자 입장에서는 '예외 처리를 제대로 하지 않았고, 이로 인해 crash까지 발생했으니, 이를 취약점으로 이용할 수 있겠구나 !' 라고 생각을 하고, 이 입력 부분에 악성코드나 악의적인 스크립트 등을 삽입하게 됩니다.


만약 crash가 발견되었다면, 그것도 공격자에게 발견되었다면 이는 취약점까지 발전될 가능성이 매우 높아지게 됩니다. 따라서 공격자는 어떤 소프트웨어의 취약점을 찾기 전에 여러가지 방법을 써서 crash를 발생시킵니다. 일단 crash를 발생 시키면 그 방법을 통해 취약점으로 이용할 수 있기 때문이죠.

Bug     >     Exception     >     Crash     >     Vulnerability (악의적으로 공격 가능)


어떤 소프트웨어든 버그와 예외라는 것이 있을 수 있습니다. 개발자는 완벽한 존재가 아니니까요. 대부분의 것들이 프로그램의 crash까지 가지 않고 간단한 에러 정도이고, 이러한 버그를 잘 수정하고 예외를 잘 처리해주면 됩니다. 

하지만 공격자의 입장은 다릅니다. 사소한 버그든 심각한 버그든, 공격자는 항상 취약점을 발견할 수 있고 취약점이 존재한다고 가정하고, 생각하고, 다양한 창의적인 방법들로 그것을 찾습니다.

막는 것보다 공격하는 것이 더 유리한 입장이 되겠죠 ? 때문에 악의적인 해킹이라는 것이 항상 발생하고, 개발자나 보안 전문가들은 새롭게 등장하는 보안 이슈들에 대해 관심을 가질 수 밖에 없고, 가져야 되겠습니다.

728x90
반응형

'Security > 보안 지식' 카테고리의 다른 글

ELF 파일 구조  (2) 2019.05.15
plt got  (1) 2019.02.03
댓글