Linux Kernel의 메모리 손상 취약점 가이드

지원 종료(EOL)된 PHP용 php2shell 패치(CVE-2026-109618 및 CVE-2026-109619)가 출시되었습니다. 수요가 많아 평소보다 영업팀의 답변이 늦어지고 있으므로, 패치된 패키지를 가장 빠르게 확보하려면 온라인에서 Runtimes용 ELS를 구매하시기 바랍니다 (새 탭에서 열림). 패치 FAQ 읽어보기

이 블로그 글의 AI 요약으로 바로 가기

  • Perplexity를 사용하여 이 게시물을 요약해 주세요
  • Gemini로 이 게시물을 요약해 주세요

사이버 공격의 주된 동기는 금전적 이득이기 때문에 공격자들은 지속적으로 데이터에 접근하기 위한 새로운 기술을 개발하게 됩니다. 이러한 공격의 빈도와 복잡성이 지속적으로 증가하고 있음에도 불구하고 메모리 손상 취약성은 40년 동안 지속되어 온 주요 문제로 남아 있습니다. 

관리자는 메모리 손상에 대한 이해를 바탕으로 사이버 공격자로부터 인프라를 적극적으로 보호할 수 있습니다. 이 가이드는 관리자가 취약점 악용 시 메모리 손상과 그 여파를 이해하는 데 필요한 지식을 제공하는 것을 목표로 합니다. 

 

Linux 커널 취약점이란 무엇인가요?

Linux 커널은 다양한 메모리 문제에 취약합니다. 다음과 같은 메모리 기반 취약점은 공격자들이 집중적으로 노리는 취약점이며 매달 발표되는 많은 보안 패치의 기반이 됩니다. 특정 취약점에 중요한 패치가 필요한 이유가 궁금하다면 이러한 문제로 인해 심각한 데이터 유출이 발생할 수 있습니다.

 

버퍼 오버플로

버퍼 오버플로는 개발자가 변수에 데이터를 할당하기 전에 변수의 유효성을 검사하지 않을 때 발생합니다. 데이터가 변수의 정의된 용량을 초과하면 '오버플로'가 발생하여 공격자가 인접한 메모리 공간에 자신의 코드를 삽입할 수 있게 됩니다. 적절한 데이터 유효성 검사가 이루어지지 않으면 버퍼 오버플로로 인해 공격자가 루트 액세스 권한을 얻거나 원격 코드를 실행할 수 있게 될 수 있습니다.

Linux는 C로 작성되었기 때문에 버퍼 오버플로 공격에 취약하지 않은 Python이나 Java와 같은 다른 프로그래밍 언어와 달리 버퍼 오버플로에 취약합니다. 따라서 Linux 취약점은 악용되어 시스템에 심각한 피해를 입힐 수 있기 때문에 특히 위험합니다.

CVE-2023-0179 는 버퍼 오버플로 취약점의 예시입니다. 이 문제로 인해 스택 및 힙 주소가 모두 유출될 수 있으며, 임의의 코드 실행을 통해 루트 사용자로 로컬 권한 상승이 허용될 수 있습니다.

 

정수 오버플로

개발자는 사용되는 데이터 유형에 따라 정수 변수에 저장할 수 있는 최대값을 정의합니다. 예를 들어 32비트 부호 없는 정수 변수는 0에서 4,294,967,295 사이의 값을 저장할 수 있는 반면, 부호 있는 정수는 -2,147,483,648에서 2,147,483,647 사이의 값을 저장할 수 있습니다. 그러나 코드에서 변수의 최대 한도를 초과하는 값을 추가하면 '오버플로'가 발생하여 예기치 않은 결과가 발생합니다. 

예를 들어 2,147,483,647 값을 저장하는 변수에 1을 더하려고 하면 결과는 음수 값인 -2,147,483,648이 됩니다. 마찬가지로 음의 정수가 오버플로되면 양수가 됩니다. 부호가 없는 정수의 동작은 사용되는 프로그래밍 언어에 따라 다르지만 C 언어의 경우 결과를 예측할 수 없는 경우가 많습니다.

CVE-2022-0998 은 Linux 커널의 virtio 장치 드라이버 코드에서 발견된 정수 오버플로 취약점입니다. 로컬 사용자는 이 결함을 사용하여 시스템을 충돌시키거나 잠재적으로 시스템에 대한 권한을 상승시킬 수 있습니다.

 

메모리 손상

개발자와 서버 관리자는 종종 Linux 커널의 메모리 손상이 까다로운 문제라고 생각합니다. 이러한 손상은 예측할 수 없는 동작으로 이어질 수 있으며, 경우에 따라서는 오류가 발생하지 않을 수도 있습니다. 이 문제는 개발자가 의도치 않게 메모리의 데이터를 변경하거나 데이터가 저장된 특정 메모리 위치를 가리키는 포인터를 수정할 때 발생합니다. 

CVE-2023-1073 는 Linux 커널의 HID(휴먼 인터페이스 장치) 하위 시스템에서 발견된 메모리 손상 취약점의 예시입니다. 로컬 공격자는 이 결함을 사용하여 시스템을 충돌시키거나 잠재적으로 시스템 내 권한을 상승시킬 수 있습니다.

서비스 거부

분산 서비스 거부(DDoS) 공격은 널리 알려져 있는데, 공격자가 여러 대의 하이재킹된 디바이스를 활용하여 대상에 트래픽을 폭주시켜 서버를 다운시키는 방식입니다. 

그러나 서비스를 방해하는 모든 공격을 서비스 거부(DoS) 공격이라고 합니다. 부적절한 메모리 관리는 리소스 고갈 공격으로 알려진 메모리 기반 DoS 공격을 유발하는 경우가 많습니다. 이러한 취약점은 서버에 존재할 경우 수천 명의 사용자에게 영향을 미치는 심각한 서비스 장애로 이어질 수 있습니다.

CVE-2023-1390 은 Linux 커널의 TIPC 커널 모듈에서 발견된 원격 서비스 거부 취약점의 예시입니다. 이 결함으로 인해 원격 공격자가 서비스 거부를 일으킬 수 있습니다.

 

NULL 포인터 참조 해제

C 프로그래밍에서 포인터는 값 자체가 아니라 값의 메모리 주소를 저장하는 변수입니다. 이를 통해 개발자는 특정 메모리 위치에 저장된 값을 조작할 수 있으며, 해당 위치와 연결된 변수가 범위를 벗어난 경우에도 해당 값을 조작할 수 있습니다. 

NULL 포인터 역참조는 애플리케이션이 유효하다고 가정하지만 실제로는 NULL인 포인터를 통해 메모리 위치에 액세스하려고 할 때 발생합니다. 이로 인해 애플리케이션이 예기치 않게 충돌하거나 종료될 수 있습니다.

CVE-2022-47929 는 Linux 커널의 네트워크 큐 규율 구현에서 발견된 NULL 포인터 참조 거부 취약점입니다. 이 취약점을 통해 로컬 공격자는 서비스 거부(시스템 충돌)를 일으킬 수 있습니다.

 

초기화 전 사용

함수에서 변수를 사용하여 데이터를 수정하거나 생성할 때는 먼저 변수 자체를 값으로 초기화해야 합니다. 변수에 값이 할당되지 않으면 초기화되지 않은 것으로 간주되어 프로그램에서 참조할 때 정의되지 않은 동작이 발생합니다.

초기화되지 않은 데이터로 인한 정의되지 않은 동작은 C 컴파일러가 오류를 진단하거나 발생시킬 필요가 없기 때문에 감지하기 어렵습니다. 대부분의 개발자는 테스트 또는 퍼징 도구를 사용하여 정의되지 않은 오류 문제를 일으킬 수 있는 초기화되지 않은 데이터를 식별합니다.

CVE-2022-29968 는 리눅스 커널에서 발견되는 사용 전 초기화 취약점의 예시로, io_uring 하위 시스템에서 kiocb->private의 초기화가 누락되어 있습니다. 이 결함으로 인해 로컬 공격자는 민감한 정보(커널 메모리)를 노출할 수 있습니다.

 

가장 위험한 메모리 취약점은 무엇인가요?

매년 MITRE는 가장 위험한 소프트웨어 취약점 상위 25개 보고서. 이 보고서에는 웹 기반 공격이 포함되어 있지만 가장 일반적이고 위험한 메모리 취약점 3가지는 다음과 같습니다:

  • 버퍼 오버플로
  • 버퍼 오버플로를 유발하는 정수 오버플로
  • 포인터 역참조(포인터 검사 누락)

세 가지 취약점 모두 심각한 데이터 유출로 이어질 수 있습니다. 메모리 손상 취약점은 지금까지 발생한 가장 큰 데이터 유출 사고의 원인이었습니다. 예를 들어, 인텔 CPU 취약점 익스플로잇은 하드웨어 결함이 시스템 전반의 침해를 촉진하는 데 중요한 역할을 한다는 점을 강조했습니다. 한 가지 중요한 발견은 최근 인텔리전스 보고서 에 따르면 공격의 약 72%가 애플리케이션별 및 웹 애플리케이션 공격이라는 사실이 밝혀졌습니다. 오픈 소스 프로그램은 종속 코드에 포함되거나 주요 애플리케이션 자체로 사용되는 경우가 많기 때문에 공격자는 코드의 문제를 식별하고 취약점을 악용하는 익스플로잇을 만들 수 있습니다.

이 보고서의 세 번째 흥미로운 통계는 공격의 21%가 기술 부문을 표적으로 삼는다는 것입니다. 기술 부문에서는 민감한 정보를 저장, 네트워크 연결, 보호 및 전송해야 합니다. 공격자는 이 부문에 집중함으로써 데이터를 저장하는 인프라에 액세스하고 이를 은밀하게 악용하여 회사를 수개월 동안 노출시킬 수 있습니다.

 

메모리 손상 취약점을 어떻게 식별하나요?

메모리 손상은 일반적으로 개발자 오류의 결과이지만, 단일 컴퓨터에서 여러 애플리케이션이 실행되는 시나리오에서는 어떤 애플리케이션이 문제를 일으키는지 파악하기가 어려울 수 있습니다. Linux에서 오류를 식별하는 한 가지 방법은 운영 체제에서 문제를 감지하는 시스템 로그를 확인하는 것입니다. 

예를 들어 Linux는 BIOS를 위해 처음 64KB의 메모리를 예약하며, 이 메모리 공간에 대한 모든 수정 사항은 운영 체제에서 검사합니다. Linux에서 이 예약 메모리에 대한 변경 사항이 감지되면 관리자가 문제를 해결할 수 있도록 경고를 기록합니다.

리눅스는 오픈 소스 운영체제이기 때문에 연구자들이 메모리 기반 취약점을 많이 보고하고 있습니다. 최근에 발견된 취약점 중 하나는 "BleedingTooth" 취약점으로, 공격자가 대상 컴퓨터의 bd 주소를 가진 컴퓨터를 충돌시켜 서비스 거부(DoS)를 일으키고 권한을 상승시키며 암호화 키에 액세스할 수 있게 해줍니다. 또 다른 예로는 공격자가 임의의 코드를 실행할 수 있게 하여 종종 시스템 손상으로 이어지는 glibc 취약점이 널리 보고되고 있습니다.

보안 연구원은 코드를 면밀히 검토하고 퍼징과 같은 스캔 도구를 사용하여 개발자에게 보고할 수 있는 오류를 트리거하는 등 다양한 도구와 기법을 사용하여 소프트웨어의 버그를 찾습니다. 취약점을 파악한 후 개발자는 코드를 패치하고 문제를 해결하기 위한 보안 업데이트를 배포합니다.

 

메모리 손상은 어떻게 해결하나요?

다행히 Linux는 커널 주소 공간 레이아웃 무작위화, 제어 흐름 무결성, 커널 페이지 테이블 격리 등 메모리 손상을 방지하는 데 도움이 되는 여러 보안 기능을 구현했습니다. 그러나 이러한 완화 기능에도 불구하고 운영 체제와 그 종속성은 여전히 공격에 취약합니다.

완화 기술은 발견된 취약점에 따라 다르지만 임시 해결책에는 종종 중요한 구성 요소를 비활성화하는 것이 포함됩니다. 예를 들어, 하트블리드 사고 당시 관리자는 클라이언트와 서버 간의 통신을 위해 OpenSSL에서 사용되는 하트비트를 비활성화할 수 있었습니다. 이렇게 하면 일시적으로 문제가 해결되었지만 서버의 하트비트 신호가 필요한 모든 애플리케이션은 충돌이나 서비스 거부와 같은 예기치 않은 결과를 경험했을 것입니다.

그러나 일시적인 완화 기술은 영구적인 것이 아니며 취약점 악용을 영구적으로 차단하려면 패치를 적용해야 합니다. 보안 패치는 코드를 업데이트하지만 시스템을 재부팅해야 하므로 다운타임이 발생합니다. 그 결과, 시스템 관리자는 유지보수 기간이 확보될 때까지 취약점 패치를 미루는 경우가 많으며, 이는 지금까지 가장 심각한 데이터 유출 사고로 이어지기도 합니다.

 

메모리 손상 취약점으로부터 인프라를 보호하는 방법은 무엇인가요?

관리자는 개발자의 자비에 맡겨져 있기 때문에 공격자를 막기 위해 올바른 조치를 취하는 것이 중요합니다. 코드를 제어할 수는 없지만 관리자는 올바른 조치를 취하여 네트워크의 공격 표면을 최소화하고 다음 공격 대상이 되는 것을 방지할 수 있습니다. 다음은 관리자가 메모리 기반 공격을 차단할 수 있는 몇 가지 방법입니다:

  • 취약성 검사를 정기적으로 실행하세요. 취약점 스캔은 이미 공개적으로 보고된 문제를 포함하여 문제를 식별합니다. 취약점이 발견되면 패치를 설치할 수 있습니다.
  • 타사 애플리케이션을 프로덕션 서버로 승격하기 전에 철저한 테스트를 수행하세요.
  • 사용 KernelCare의 실시간 패치 적용 를 사용하여 재부팅할 필요 없이 최신 보안 패치를 빠르게 적용하세요.

 

결론

메모리 기반 취약점과 인증 취약점과 같은 더 복잡한 문제를 탐지하는 것은 어려운 일이며, 오류에 대한 최적의 보호 기능을 제공하려면 즉각적인 패치가 중요합니다. KernelCare Enterprise 는 관리자가 패치를 지연할 필요가 없는 실시간 패치 서비스를 제공합니다. 다운타임이나 중단 없이 다양한 버전의 Linux를 자동으로 패치하여 유지 관리 기간을 기다리는 동안 중요한 인프라가 취약성에 노출되지 않도록 보장합니다.

요약
Linux Kernel의 메모리 손상 취약점 가이드
기사 이름
Linux Kernel의 메모리 손상 취약점 가이드
설명
이 블로그 게시물을 읽고 메모리 손상 취약점의 위협과 그 원인, 시스템을 보호하는 방법에 대해 알아보세요.
작성자
게시자 이름
TuxCare
게시자 로고

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

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

목차
필요한 오픈 소스 보안에 대한 답변 얻기

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

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