본문 바로가기

ISMS-P/보안

포멧스트링 공격

SMALL

포멧스트링 공격은 프로그래밍 언어에서 사용되는 포맷 문자열 함수의 취약점을 이용한 공격입니다. 이 공격은 프로그램이 사용자의 입력을 포맷 문자열로 처리할 때 발생합니다. 공격자는 포맷 문자열의 특수한 포맷 지정자를 사용하여 메모리 내의 데이터를 읽거나 쓰는 등의 악의적인 동작을 수행합니다.

포멧스트링 공격은 주로 다음과 같은 특징을 가집니다:

1. **메모리 읽기/쓰기:** 포맷 문자열을 통해 공격자는 프로그램의 메모리에 접근하여 데이터를 읽거나 쓸 수 있습니다. 이를 통해 프로그램의 중요한 정보, 예를 들어 암호나 인증 토큰 등을 탈취할 수 있습니다.

2. **포맷 지정자 덮어쓰기:** 공격자는 포맷 문자열을 통해 메모리의 주소를 변경하고 포맷 지정자를 덮어쓰는 방식으로 임의의 데이터를 변경할 수 있습니다. 이를 이용하여 프로그램의 흐름을 조작하거나 다른 변수의 값을 조작할 수 있습니다.

3. **서비스 거부:** 포맷 문자열 함수는 잘못된 포맷 지정자를 처리하면 예외를 발생시키거나 프로그램이 비정상적으로 종료될 수 있습니다. 공격자는 이를 악용하여 서비스 거부 공격을 수행할 수 있습니다.

포멧스트링 공격은 프로그램에서 포맷 문자열 함수를 사용할 때 발생할 수 있는 취약점입니다. 이를 방지하기 위해서는 다음과 같은 조치를 취할 수 있습니다:

- **입력 유효성 검사:** 사용자 입력을 받을 때는 반드시 입력 값을 검증해야 합니다. 입력된 값이 예상한 형식에 맞는지 확인하고, 필요한 경우에는 입력 값을 제한하거나 특수 문자를 이스케이프*해야 합니다.

특수 문자를 이스케이프(escape)하여 사용하면 포맷스트링 공격과 같은 취약점을 방지할 수 있습니다. 이스케이프는 특정 문자 앞에 백슬래시(\)를 추가하여 그 문자를 일반 문자로 취급하도록 하는 것입니다. 다음은 몇 가지 일반적인 특수 문자의 이스케이프 방법입니다:

- %: 포맷 문자열에서 `%` 문자를 사용해야 할 때는 `%%`로 이스케이프합니다.
- \: 백슬래시 문자를 사용해야 할 때는 `\\`로 이스케이프합니다.
- ': 작은따옴표를 사용해야 할 때는 `\'`로 이스케이프합니다.
- ": 큰따옴표를 사용해야 할 때는 `\"`로 이스케이프합니다.
- newline: 새 줄 문자를 사용해야 할 때는 `\n`로 이스케이프합니다.

이외에도 다른 특수 문자에 대해서도 해당 문자를 이스케이프하는 방식을 사용할 수 있습니다. 각 프로그래밍 언어나 도구마다 이스케이프 규칙이 조금씩 다를 수 있으므로 해당 언어 또는 도구의 문서를 참조하여 정확한 이스케이프 방법을 확인해야 합니다.

특수 문자를 이스케이프하여 사용하면 사용자 입력이 포맷 문자열에 악용되는 것을 방지할 수 있습니다. 이를 통해 포맷스트링 공격과 같은 취약점을 예방하고 시스템의 안전성을 향상시킬 수 있습니다.



- **포맷 문자열의 하드코딩:** 포맷 문자열 함수를 사용할 때는 포맷 문자열 자체를 하드코딩하여 사용해야 합니다. 사용자 입력을 포맷 문자열에 직접 전달하는 것은 위험합니다.

- **보안 업데이트와 패치:** 개발 플랫폼, 프레임워크, 라이브러리 등을 사용할 때는 항상 최신 보안 업데이트와 패치를 적용해야 합니다. 이렇게 함으로써 포맷스트링 공격과 같은 취약점이 해결될 수 있습니다.

포맷스트링 공격은 신중하게 처리되어야 하며, 보안 조치를 취함으로써 사전에 방지할 수 있습니다.

'ISMS-P > 보안' 카테고리의 다른 글

EAM : Enterprise Asset Management  (0) 2023.07.05
소프트웨어 구현 단계 7가지 취약점  (0) 2023.07.05
네트워크 공격  (0) 2023.07.05
서버 해킹  (0) 2023.07.05
사이버 위협  (0) 2023.07.05