ClickCease 취약점 뒤에 숨겨진 버그 2부

콘텐츠 표

인기 뉴스레터 구독하기

4,500명 이상의 Linux 및 오픈소스 전문가와 함께하세요!

한 달에 두 번. 스팸이 없습니다.

취약점 뒤에 숨겨진 버그 2부

조아오 코레이아

2022년 11월 14일 - 기술 에반젤리스트

저희는 IT 세계에 영향을 미치는 취약점을 유발하는 코드 문제를 계속해서 살펴보고 있습니다. 이러한 버그를 살펴보는 5부작 블로그 시리즈의 이번 편에서는 20번부터 16번까지의 버그에 대해 살펴봅니다. 2022년 Mitre CWE 상위 25개 목록에서 20위부터 16위까지의 버그를 살펴보며 애플리케이션과 시스템 전반의 취약점을 유발하는 실제 코드 문제에 대한 맥락과 추가 정보를 제공합니다.

이 시리즈의 이전 게시물은 여기에서.

20 - 잘못된 기본 권한

이러한 종류의 버그는 운영 체제 수준 또는 애플리케이션 수준에서 소프트웨어 패키지를 준비하는 과정에서 범위가 너무 광범위한 항목의 하위 집합에 대한 권한을 포함하는 방식에서 발생합니다. 일반적으로 권한이 없는 사용자가 실행해서는 안 되는 파일을 실행할 수 있는 권한이 있는 실행 파일을 의미하거나, 의도하지 않은 방식으로 시스템의 다른 구성 요소를 조작할 수 있는 권한으로 해당 파일을 실행하도록 하는 것을 의미합니다.

실행 파일에 너무 제한적인 권한을 부여한 다음 운영 체제가 원래 패키지에 포함된 구성 요소가 아닌 공격자가 제어하는 위치에 있는 대체 파일을 자동으로 찾도록 하는 등, 그 반대의 경우도 발생할 수 있습니다.

주요 위험은 이것이 기본 권한이므로 패키지가 배포되는 즉시 다른 조치를 취할 필요 없이 즉시 위험에 노출된다는 것입니다. 이렇게 하면 위험 벡터가 사용 에서 배포.

19 - 메모리 버퍼 범위 내에서 부적절한 작업 제한

일반적으로 "버퍼 오버플로" 또는 "버퍼 오버런"이라고 하는 이 이상 현상은 주어진 변수에 대해 미리 정렬된 공간을 벗어난 메모리 위치를 읽거나 해당 위치에 쓰기를 시도하는 것입니다. 

이는 의도적으로 버퍼를 벗어난 메모리 위치를 전달하거나 주어진 컨텍스트에서 허용되는지 여부를 확인하지 않고 작업 결과를 읽기/쓰기 위치로 사용함으로써 발생할 수 있습니다.

다음 예시를 살펴보겠습니다:


int main (int argc, char **argv) {

char *items[] = {"A", "B", "C", "D"};

int index = AskUserForIndex();

printf("You selected %s\n", items[index-1]);

}

(코드 샘플은 다음 링크에서 가져온 것입니다. https://cwe.mitre.org/data/definitions/119.html)

이 예제에서 사용자가 인덱스로 "5"를 입력하면 프로그램은 이를 준수하여 배열 외부에 있는 메모리 위치의 내용을 반환합니다. 운영 체제 및 메모리 아키텍처에 따라 프로그램 공간 외부의 메모리 값이 반환되거나, 프로그램이 충돌하거나, 다른 프로그램이 충돌하거나(쓰기가 발생하는 경우), 시스템 상태가 손상되거나, 아무것도 충돌하지 않고 공격이 반복되는 등 여러 가지 일이 발생할 수 있습니다. 다른 인덱스 값으로 프로세스를 반복하여 대량의 메모리를 읽을 수 있습니다.

이러한 종류의 버그는 버퍼가 수용하도록 만들어진 것보다 더 많은 데이터를 버퍼에 써서 읽을 때뿐만 아니라 버퍼에 값을 쓸 때도 문제를 일으킬 수 있습니다. 버퍼 바로 뒤에 있는 메모리 영역에 사용자에게 권한이 있는지 여부를 나타내는 플래그가 있는 경우, 간단한 바이트 변경으로 일반 사용자가 관리자로 바뀔 수 있습니다.

이러한 유형의 코드 버그는 일반적으로 프로그래밍 수업에서 메모리 액세스 전에 검사를 수행하여 이를 방지하는 방법을 배우지만, 애초에 문제가 어디서 발생하는지 명확하지 않은 경우가 있습니다. 정적 코드 분석 도구, 동료 검토, 페어 프로그래밍은 이러한 버그가 프로덕션 코드에 포함되기 전에 발견할 수 있는 모든 방법입니다.

프로그래밍의 또 다른 관련 개념으로는 탄광의 카나리아에 비유되는 '카나리아'가 있는데, 버퍼 바로 뒤에 값을 기록한 다음 버퍼에 값이 기록된 후 그 값이 존재하는지 확인하는 것입니다. 원래 값이 더 이상 존재하지 않으면 프로그래머는 버퍼 오버플로가 발생했다고 가정하고 의도적으로 애플리케이션을 충돌시켜 추가 손상을 방지하거나 사용자 또는 다른 메커니즘을 통해 문제를 처리할 수 있습니다. 유용하지만 영리한 공격자는 카나리아 값을 새 값의 일부로 포함시켜 트리거되지 않도록 함으로써 이를 우회할 수 있습니다.

18 - 중요 기능에 대한 인증 누락

기능을 변경하는 모든 기능은 해당 작업을 수행하는 행위자가 해당 작업을 수행할 수 있는 권한이 있는지 여부를 검증하고, 행위자가 허용되지 않는 경우 해당 작업을 방지해야 합니다. 애플리케이션이 이를 검증하지 못하면 이 범주에 속합니다.

애플리케이션은 종종 데이터, 사용자 또는 연결을 추가, 제거, 수정 또는 삭제하는 등의 작업을 수행합니다. 이러한 작업 중 하나만 누락되어도 전체 애플리케이션에 대한 인증 검사가 누락되어 애플리케이션이 손상되거나 신뢰할 수 없게 될 수 있습니다. 또한 이러한 작업에는 여러 단계가 포함되므로 각 단계 또는 각 프로세스의 진입 지점에서 유효성 검사를 수행하는 것이 가장 이상적입니다.

또 다른 전형적인 예는 클라우드 기반 스토리지에서 인증 확인이 누락된 경우입니다(예: "유출된 S3 버킷"), 기밀 데이터가 실수로 공개적으로 액세스할 수 있는 방식으로 저장되는 경우입니다.

17 - 명령에 사용된 특수 요소의 부적절한 무력화

애플리케이션에서 입력을 수락한 후 실행할 때마다 제대로 확인하지 않으면 의도한 목적을 변경하는 추가 명령, 매개변수 또는 플래그가 포함될 수 있습니다. 

시스템 애플리케이션이 사용자가 제공한 매개변수가 있는 명령을 실행해야 하는 경우, 교활한 사용자가 명령 종료 문자 뒤에 다른 명령을 포함시켜 원래 프로그램과 동일한 권한 수준으로 실행할 수 있습니다. 이러한 유형의 문제는 모두 암시적으로 입력을 신뢰하는 데서 발생하기 때문에 'SQL 인젝션' 및 '생성된 코드의 부적절한 제어' 버그와 밀접한 관련이 있습니다. 

문제의 원인은 일반적으로 보안 문제를 적절히 고려하지 않은 아키텍처 수준에 있으며, 이로 인해 애플리케이션에 안전하지 않은 동작이 발생하게 됩니다. 경험상, 개별 기능 수준에서도 이상적이지만 최소한 애플리케이션 수준에서는 어떤 입력도 좋은 것으로 신뢰해서는 안 됩니다.

16 - 누락된 인증

18번에서는 애플리케이션의 일부가 어떻게 인증 검사를 놓칠 수 있는지 살펴보았습니다. 이번 글에서는 인증 누락으로 인해 어떤 문제가 발생할 수 있는지 살펴봅니다.

웹사이트는 인증 메커니즘 뒤에 민감한 섹션을 보호하는 것이 일반적이지만, 각 개별 페이지에서는 URL에 직접 액세스할 경우 접근이 불가능한 정보가 유출될 수 있는 위험을 감수하고 이 검사를 시행해야 합니다. 이는 페이지 액세스뿐만 아니라 다운로드/업로드/쿼리에도 적용됩니다.

기존 애플리케이션 수준에서는 사용자 또는 외부 호출 애플리케이션에 암묵적 신뢰가 부여될 때 권한 부여 누락이 발생합니다. 

17번과 마찬가지로 이 결함은 일반적으로 개발의 아키텍처 단계에서 발생하며, 모든 수준에서 적절한 액세스 제어 메커니즘을 적용하기 위한 적절한 보안 전술을 고려하지 않습니다. 이러한 유형의 버그가 발견된 후 특정 애플리케이션의 코드를 식별하고 수정하는 작업은 사후에 코드를 적절히 보호하기 위해 광범위한 리팩터링이 필요하기 때문에 일반적으로 막대한 워크로드 비용이 발생합니다.

운영 체제 수준에서 이러한 유형의 문제는 도구에 액세스 제어 목록이 연결되어 있지 않아 모든 사용자가 도구를 실행할 수 있는 경우에 발생합니다.

 

요약
취약점 뒤에 숨겨진 버그 2부
기사 이름
취약점 뒤에 숨겨진 버그 2부
설명
저희는 IT 세계에 영향을 미치는 취약점을 유발하는 버그를 지속적으로 살펴보고 있습니다. 5부로 구성된 블로그 시리즈를 계속 읽어보세요.
작성자
게시자 이름
TuxCare
게시자 로고

Kernel 재부팅, 시스템 다운타임 또는 예정된 유지 보수 기간 없이 취약성 패치를 자동화하고 싶으신가요?

TuxCare로 라이브 패치에 대해 알아보기

TuxCare 게스트 작가 되기

시작하기

메일

가입

4,500

Linux & 오픈 소스
전문가!


뉴스레터 구독하기