DLL (Dynamic Link Library) 인젝션은 공격자가 실행 중인 프로세스에 악성 코드를 삽입하는 기법입니다. 이 방법은 공격자가 다른 프로세스의 주소 공간 내에서 자신의 코드를 실행할 수 있게 하여, 마치 그 프로세스의 일부인 것처럼 보이게 만듭니다. DLL 인젝션은 악성코드 전파, 권한 상승, 데이터 탈취, 원격 접근을 포함한 다양한 유형의 사이버 공격에서 흔히 사용됩니다.
DLL 인젝션은 해커들이 타겟 프로세스에 악성 코드를 성공적으로 주입하기 위해 따르는 여러 단계를 포함합니다:
타겟 프로세스 식별: 공격자는 먼저 타겟 프로세스를 식별합니다. 이 타겟 프로세스는 합법적인 소프트웨어 애플리케이션이나 시스템 프로세스일 수 있으며, 공격자는 이곳에 악성 코드를 삽입하려고 합니다.
DLL 파일 찾기: 다음 단계는 악성 코드를 포함하는 DLL 파일을 생성하거나 찾는 것입니다. 이 DLL 파일은 타겟 프로세스와 상호작용하며 공격자의 명령을 실행하도록 설계됩니다.
DLL 강제 로딩: 공격자는 다양한 기술을 사용하여 타겟 프로세스가 자신들의 DLL 파일을 로드하도록 강제합니다. 이는 프로세스 할로잉과 같은 방법을 통해 달성될 수 있으며, 공격자는 합법적인 프로세스의 일시 중단된 인스턴스를 생성하고, 그 메모리를 자신의 DLL로 교체한 후 실행을 재개합니다.
악성 코드 실행: DLL이 타겟 프로세스에 성공적으로 주입되면, 공격자의 코드는 프로세스 실행에 대한 제어 권한을 얻게 됩니다. 이 지점부터 공격자는 민감한 정보 탈취, 타겟 프로세스의 행동 수정, 혹은 지속적인 접근을 위한 백도어 설립과 같은 다양한 악의적 활동을 수행할 수 있습니다.
DLL 인젝션은 DLL이 타겟 프로세스에 주입되는 방법에 따라 다양한 방식으로 구분될 수 있습니다. 일반적인 기술로는 다음과 같은 것들이 있습니다:
스레드 인젝션: 공격자는 타겟 프로세스 내에서 새로운 스레드를 생성하고, 이를 통해 악의적인 DLL을 로드하도록 강제합니다. 이를 통해 공격자의 코드가 타겟 프로세스와 동시에 실행될 수 있습니다.
APC (비동기 프로시저 호출) 인젝션: 공격자는 Windows 운영 체제에서 제공하는 APC 메커니즘을 이용해 그들의 DLL을 타겟 프로세스에 주입합니다. 이 방법은 시스템 API를 활용하여 타겟 프로세스 내의 특정 이벤트나 함수 호출 중에 DLL 코드를 실행하도록 예약합니다.
메모리 인젝션: 공격자는 타겟 프로세스의 메모리 공간에 직접적으로 악의적인 DLL을 기록합니다. 이는 기존 메모리 영역을 수정하거나 새로운 메모리를 할당하여 이루어질 수 있습니다.
Import Address Table (IAT) 훅킹: 공격자는 타겟 프로세스의 Import Address Table을 수정하여 함수 호출을 악성 코드로 리디렉션합니다. 이 기술은 공격자가 타겟 프로세스의 동작을 가로채고 조작할 수 있게 합니다.
DLL 인젝션 공격의 위험을 완화하기 위해 적절한 보안 조치를 구현하는 것이 중요합니다. 예방 팁은 다음과 같습니다:
코드 서명 및 디지털 인증서: 코드 서명 및 디지털 인증서를 사용하면 오직 합법적인 DLL만이 프로세스에 의해 로드되도록 보장할 수 있습니다. 코드 서명은 소프트웨어의 무결성과 신뢰성을 검증하여 악성 DLL 주입을 어렵게 만듭니다.
정기 모니터링: 시스템 프로세스와 네트워크 트래픽을 정기적으로 모니터링하여 DLL 인젝션을 나타낼 수 있는 비정상적인 행동을 감지합니다. 프로세스 활동의 실시간 모니터링과 분석은 수상한 DLL을 식별하고 잠재적인 공격을 해결하는 데 도움을 줄 수 있습니다.
접근 제어 및 최소 권한 원칙: 강력한 접근 제어와 최소 권한 원칙을 구현하면 성공적인 DLL 인젝션 공격의 영향을 제한할 수 있습니다. 프로세스와 사용자의 접근 권한을 제한하여 중요한 시스템 파일과 DLL의 무단 수정을 방지할 수 있습니다.
애플리케이션 화이트리스트: 승인된 애플리케이션 목록을 정의함으로써 조직은 승인되지 않은 소프트웨어 실행을 제한할 수 있습니다. 애플리케이션 화이트리스트는 타겟 프로세스로 악의적인 DLL의 로딩을 방지하는 데 도움을 줄 수 있습니다.
보안 업데이트와 패치: 최신 보안 업데이트와 패치를 통해 운영 체제와 소프트웨어 애플리케이션을 최신 상태로 유지하십시오. 이는 공격자가 DLL 인젝션 공격을 위해 활용할 수 있는 알려진 취약점을 해결하는 데 도움을 줍니다.
관련 용어 - 프로세스 인젝션: DLL 인젝션을 포함한 다양한 기법을 포괄하여 실행 중인 프로세스에 악성 코드를 삽입하는 것을 말합니다. 프로세스 인젝션에는 DLL 인젝션, 프로세스 할로잉, 반사형 DLL 인젝션 등이 포함됩니다.
코드 서명: 소프트웨어의 진위성과 무결성을 확인하기 위해 디지털 서명을 하는 과정입니다. 코드 서명은 소프트웨어가 변조되지 않았으며 신뢰할 수 있는 출처에서 왔음을 확인하기 위해 디지털 인증서를 사용합니다. 코드 서명은 악성 DLL의 로드를 방지하고 소프트웨어 실행의 무결성을 보장하는 데 도움을 줄 수 있습니다.
백도어: 시스템이나 소프트웨어 애플리케이션에 대한 무단 접근을 허용하는 숨겨진 방법입니다. DLL 인젝션의 맥락에서 공격자는 타겟 시스템에 백도어를 마련하기 위한 수단으로 DLL 인젝션을 사용할 수 있습니다. 이는 그들이 지속적인 접근권을 유지하고 무단 활동을 수행하거나 시스템을 추가로 손상시키는 것을 가능하게 합니다.