1. 개요
파라미터(매개변수)는 프로그래밍에서 함수나 메서드에 전달되는 값을 의미합니다. 이러한 파라미터 역시 보안 취약점을 갖고 있으며, 해커들이 악용하여 해킹 사례가 발생하고 있습니다. 이 글에서는 파라미터의 보안 취약점과 그로 인한 해킹 사례에 대해 다루고자 합니다.
해당 파라미터 변조는 아래와 같은 CWE 코드를 가지고 있습니다.
(Parameter Manipulation / CWE-472: External Control of Assumed-Immutable Web Parameter)
2. 파라미터의 보안 취약점
파라미터는 프로그램 실행 중 중요한 데이터를 전달하므로, 이에 대한 보안 취약점이 심각한 영향을 미칠 수 있습니다.
웹 서버에 전송되는 모든 HTTP 요청 값 (URL Parmeter, Cookie, Referer, form 변수, Hidden 필드, User-Agent 등)을 조각하여 정상적으로는 접근 권한이 없는 정보를 조회/변경할 수 있습니다.
또한, 인터넷 쇼핑몰 등 가격 또는 수량 값을 조작하여 부정이익을 노리는 행위들도 할 수 있는데, 이러한 사례들을 통들어 파라미터 변조라 합니다.
파라미터 변조 취약점은 해킹 유형과 범위가 다양하여 자동화 도구로는 발견하기 힘들 뿐 아니라, 시스템 성격에 따라 피해 범위가 극심할 수 있는 취약점으로, 해당 시스템 운영 담당자/개발자의 애플리케이션 보안 역량이 절실히 요구됩니다.
대표적인 파라미터의 보안 취약점으로는 다음과 같은 것들이 있습니다.
2.1 SQL 삽입 취약점
파라미터로 전달되는 SQL 쿼리문에 취약점이 존재하여 해커들이 악성 SQL 코드를 삽입하는 경우가 있습니다. 이를 통해 데이터베이스의 정보를 탈취하거나 조작하는 등의 행위가 이루어질 수 있습니다.
2.2 인증 및 세션 관리 취약점
파라미터로 전달되는 사용자 인증 정보나 세션 관리에 취약점이 존재하여 인증된 사용자의 정보가 노출되거나, 해커가 세션을 탈취하여 다른 사용자로 위장하는 등의 공격이 가능합니다.
2.3 원격 코드 실행 취약점
파라미터를 이용한 원격 코드 실행 취약점은 해커가 파라미터를 조작하여 원격에서 악성 코드를 실행할 수 있는 취약점입니다. 이를 통해 시스템을 해킹하거나, 악성 코드를 실행하여 시스템에 피해를 입힐 수 있습니다.
3. 파라미터와 해킹 사례
파라미터의 보안 취약점을 악용한 해킹 사례가 여러 차례 발생하고 있습니다. 이러한 해킹 사례들은 파라미터를 조작하여 이루어집니다. 대표적인 사례들을 살펴보겠습니다.
3.1 데이터베이스 탈취
해커들은 파라미터의 SQL 삽입 취약점을 이용하여 데이터베이스의 정보를 탈취하는 사례가 발생했습니다. 파라미터를 조작하여 SQL 쿼리문을 조작하고, 데이터베이스의 중요 정보를 빼내는 행위가 이루어진 것입니다.
3.2 인증 우회
파라미터의 인증 및 세션 관리 취약점을 이용한 해킹 사례도 있습니다. 해커들은 파라미터를 조작하여 인증된 사용자의 정보를 탈취하여 시스템에 접근하거나, 세션을 변조하여 다른 사용자로 위장하는 행위가 이루어진 것으로 보고되었습니다.
3.3 시스템 침투
파라미터의 원격 코드 실행 취약점을 악용하여 시스템에 침투하는 사례도 있었습니다. 해커들은 파라미터를 조작하여 악성 코드를 실행하고, 시스템에 침투하여 기밀 정보를 탈취하거나 시스템을 마비시키는 행위를 했습니다.
3.4 실제 응용사례
파라미터 변조 취약점을 이용한 대표 사례로 1:1 게시판에서 파라미터 변조를 통한 취약점이 있습니다.
이는 사용자가 다른 사용자의 개인 정보나 비공개 게시물 등을 열람할 수 있는 보안 결함을 의미합니다. 이러한 취약점을 이용하여 해커나 악의적인 사용자는 다른 사용자들의 1:1 게시글을 열람하는 것을 시도할 수 있습니다.
다양한 방법으로 파라미터 변조를 시도할 수 있으며, 주로 URL의 파라미터를 조작하거나 HTTP 요청을 조작하여 취약점을 이용합니다. 1:1 게시판에서 발생할 수 있는 몇 가지 주요한 취약점과 그에 따른 예시를 살펴보겠습니다:
- 다른 사용자의 게시글 열람:
- 사용자가 1:1 게시판의 URL 파라미터를 조작하여 다른 사용자의 게시글을 열람할 수 있습니다.
- 예시: 일반적인 게시글 URL은
https://example.com/board/view?id=123
와 같이 되어 있을 수 있습니다.
해커가id=123
을id=456
과 같이 변경하여 다른 사용자의 게시글을 열람하는 시도를 할 수 있습니다.
- 인증 우회를 통한 게시글 열람:
- 인증 과정을 우회하여 인증되지 않은 사용자가 비공개 게시글을 열람할 수 있습니다.
- 예시: 게시글을 보기 위해 인증이 필요하나, 해커가 인증되지 않은 상태로 게시글 열람 요청을 보내는 시도를 할 수 있습니다.
- 세션 하이재킹을 통한 게시글 열람:
- 다른 사용자의 세션 ID를 탈취하여 해당 사용자로 위장하여 게시글을 열람할 수 있습니다.
- 예시: 사용자가 로그인한 후 세션 ID를 탈취하여 세션 하이재킹을 시도하는 경우, 해커는 해당 사용자로 위장하여 게시글을 열람할 수 있습니다.
- 취약한 데이터 검증:
- 사용자가 입력한 URL 파라미터에 대한 검증이 제대로 이루어지지 않아 취약점이 발생할 수 있습니다.
- 예시: 사용자가 URL 파라미터로 숫자가 아닌 문자열을 입력하는 경우, 적절한 검증이 이루어지지 않아 애플리케이션에 오류가 발생하거나 다른 사용자의 게시글을 열람하는 시도를 할 수 있습니다.
이러한 취약점을 방지하기 위해서는 개발자들은 파라미터의 검증과 인증을 철저히 확인하여 적절한 보안 조치를 취해야 합니다. 인증된 사용자만이 자신의 게시글을 열람하고, 인증되지 않은 사용자는 접근할 수 없도록 보호해야 합니다. 또한 URL 파라미터와 같은 입력값에 대한 검증을 철저히 수행하여 취약점을 방지하는 것이 중요합니다. 사용자들은 민감한 정보가 포함된 게시글을 공개적으로 열람하는 것을 방지하기 위해 개인 정보 보호에 더욱 신경을 써야 합니다.
해당 사례 뿐만 아니라 저도 여러 보안컨설팅 사업을 통해 쇼핑몰 가격 변조, 대국민사이트 고객정보 조회 등 무수한 정보 탈취 및 변조 행위가 가능했었던 말그대로 무시무시한 취약점입니다.
물론 해당 포스팅글을 토대로 절대 따라해선 안됩니다.
(법적 책임은 해당 행위 당사자에 있습니다)
4. 대응 및 보안 강화
시스템 개발자들은 보안 취약점에 대응하기 위해 지속적으로 업데이트를 진행하고 있습니다.
소스단에서 입력값 검증, WAF 등 정보보안시스템 운영, 프레임워크 및 라이브러리, 플러그인 등에 대한 보안 패치를 배포하여 파라미터의 취약점을 해결하고, 사용자들에게 안정적인 서비스를 제공하려고 노력하고 있습니다. 또한 사용자들에게 보안 관련 경고와 안내를 제공하여 보다 안전한 사용을 독려하고 있습니다.
파라미터 변조 공격에 대비하여 아래와 같은 대응 방안을 수립 할 수 있습니다.
- 입력값 검증 및 이스케이프 처리: (제일 중요)
- 모든 사용자 입력값은 적절한 검증을 거쳐야 합니다. 예를 들어, 숫자가 필요한 파라미터에 문자열이 입력되는 경우에 대한 처리를 해야 합니다.
- 입력값에 대해서는 반드시 이스케이프(Escape) 처리를 해야 합니다. 이스케이프는 사용자 입력에 포함된 특수문자를 무력화하여 악의적인 코드가 실행되는 것을 방지합니다.
- Prepared Statement 사용:
- 데이터베이스 쿼리문에서는 Prepared Statement를 사용해야 합니다. Prepared Statement는 쿼리문의 파라미터를 나중에 입력받아 실행하는 방법으로, 입력값의 이스케이프 처리를 자동으로 해줍니다. 이를 통해 SQL 삽입 공격을 방지할 수 있습니다.
- 데이터베이스 쿼리문에서는 Prepared Statement를 사용해야 합니다. Prepared Statement는 쿼리문의 파라미터를 나중에 입력받아 실행하는 방법으로, 입력값의 이스케이프 처리를 자동으로 해줍니다. 이를 통해 SQL 삽입 공격을 방지할 수 있습니다.
- 인증과 권한 검사:
- 파라미터로 전달되는 요청에는 해당 사용자의 인증 정보를 포함하도록 합니다. 사용자의 권한을 검사하여 해당 요청에 대한 접근 권한이 있는지 확인해야 합니다. 인증되지 않은 사용자가 접근할 수 없는 페이지에 대한 요청을 걸러냅니다.
- 파라미터로 전달되는 요청에는 해당 사용자의 인증 정보를 포함하도록 합니다. 사용자의 권한을 검사하여 해당 요청에 대한 접근 권한이 있는지 확인해야 합니다. 인증되지 않은 사용자가 접근할 수 없는 페이지에 대한 요청을 걸러냅니다.
- 쿠키 보안 설정:
- 쿠키를 사용하여 세션을 관리하는 경우, 쿠키에 민감한 정보를 저장하지 않도록 주의해야 합니다. 세션 ID와 같은 중요한 정보는 HttpOnly 속성을 적용하여 JavaScript를 통한 접근을 막고, Secure 속성을 사용하여 암호화된 HTTPS 연결에서만 쿠키가 전송되도록 설정합니다.
- 쿠키를 사용하여 세션을 관리하는 경우, 쿠키에 민감한 정보를 저장하지 않도록 주의해야 합니다. 세션 ID와 같은 중요한 정보는 HttpOnly 속성을 적용하여 JavaScript를 통한 접근을 막고, Secure 속성을 사용하여 암호화된 HTTPS 연결에서만 쿠키가 전송되도록 설정합니다.
- 보안 패치 및 업데이트:
- 프레임워크, 라이브러리, 플러그인 등에 대한 보안 패치와 업데이트를 정기적으로 확인하고 적용합니다. 취약점이 발견되면 가능한 빠르게 보완 조치를 적용해야 합니다.
- 프레임워크, 라이브러리, 플러그인 등에 대한 보안 패치와 업데이트를 정기적으로 확인하고 적용합니다. 취약점이 발견되면 가능한 빠르게 보완 조치를 적용해야 합니다.
- 보안 감사 로그:
- 애플리케이션에서 발생하는 요청과 오류에 대한 로그를 상세히 기록하여 보안 감사를 수행합니다. 이를 통해 악의적인 시도나 취약점을 식별하고 대응할 수 있습니다.
- 애플리케이션에서 발생하는 요청과 오류에 대한 로그를 상세히 기록하여 보안 감사를 수행합니다. 이를 통해 악의적인 시도나 취약점을 식별하고 대응할 수 있습니다.
- 웹 애플리케이션 방화벽 (WAF) 사용:
- 웹 애플리케이션 방화벽은 애플리케이션에 들어오는 요청을 검사하여 악성 요청을 차단하는 역할을 합니다. WAF를 사용하여 파라미터 변조 공격을 탐지하고 차단할 수 있습니다.
이러한 대응 방안을 적절하게 적용함으로써 파라미터 변조 공격에 대비할 수 있으며, 사용자들의 개인 정보와 시스템의 안전을 보호할 수 있습니다. 보안에 대한 인식과 지속적인 감시, 보완을 통해 웹 애플리케이션의 보안 수준을 높이는 것이 중요합니다.
5. 사용자 보호를 위한 조치
사용자들도 보안에 주의를 기울여야 합니다. 다음과 같은 조치들을 취하여 보안을 강화할 수 있습니다.
5.1 최신 버전 사용
항상 최신 버전의 프로그램을 사용하는 것이 중요합니다. 최신 버전은 보안 패치가 적용되어 있으며, 보다 안정적인 사용을 제공합니다.
5.2 보안 패스워드 사용
강력한 보안 패스워드를 사용하여 계정의 안전을 보호해야 합니다. 패스워드는 문자, 숫자, 특수문자를 혼합하여 설정하는 것이 좋습니다.
5.3 보안 업데이트 확인
시스템 개발자들로부터 발행되는 보안 업데이트를 주기적으로 확인하고 적용해야 합니다. 업데이트는 보안 취약점을 보완하는 중요한 조치입니다.
결론
파라미터(매개변수)는 프로그래밍에서 매우 중요한 개념이며, 사용되는 과정에서 보안 취약점을 갖고 있습니다. 이로 인해 해커들이 악용하여 사용자들의 정보를 탈취하거나 시스템에 침투하는 등의 행위가 이루어질 수 있습니다. 파라미터 사용자들은 보안에 주의를 기울이고, 개발자들은 지속적인 보안 강화에 노력하여 사용자들에게 안정적인 환경을 제공해야 합니다. 최신 버전 사용과 보안 조치를 취함으로써, 파라미터의 보안 수준을 높이고 사용자들의 정보를 보호하는데에 성공할 수 있습니다.