악성 코드의 정의
악성 코드는 시스템 취약성을 만들거나 공격하도록 만들어진 유해한 컴퓨터 프로그래밍 스크립트입니다. 위협 행위자는 컴퓨터 시스템을 상대로 원치 않는 변경, 손상 또는 지속적 액세스를 유발하기 위해 이러한 코드를 설계합니다. 악성 코드는 백도어, 보안 침해, 정보 및 데이터 도난, 파일 및 컴퓨터에 대한 기타 잠재적인 손상으로 이어질 수 있습니다.
악성 코드란 무엇인가요?
악성 코드는 악의적인 사용자가 컴퓨터 시스템이 위험한 행동을 하도록 조작하기 위해 '사용'하는 언어입니다. 기존 컴퓨터 프로그램, 파일, 인프라의 프로그래밍에 대한 변경사항이나 추가 기능을 작성해서 만듭니다.
이러한 위협은 대부분의 사이버 보안 공격을 수행하는 데 사용되는 기본적인 도구입니다. 해커는 컴퓨터 프로그래밍에 사용되는 언어를 바탕으로 취약점을 조사해서 찾아냅니다. 그런 다음 스크립트 또는 명령어 목록으로 알려진 "문장"을 만들어 해당 언어로 된 취약점을 악용합니다. 이러한 스크립트는 매크로 명령어, 줄여서 매크로라고 하는 것을 통해 재사용하고 자동화할 수 있습니다.
컴퓨터 시스템을 공격하는 수법이 수동적인 방법으로 제한되면 해커와 기타 위협 행위자는 매우 천천히 움직일 것입니다. 안타깝게도 악성 코드를 사용하면 공격을 자동화할 수 있습니다. 심지어 스스로 복제해서 전파되고 손해를 입히는 코드도 있습니다. 다운로드하거나 상호작용하는 인간 사용자가 필요한 코드 유형도 있습니다.
악성 코드의 결과는 다음 중 하나로 이어지는 경우가 많습니다.
- 데이터 손상
- 분산 서비스 거부(DDoS)
- 자격 증명 및 비공개 정보 도난
- 랜섬 및 부당 거래
- 성가시고 불편함
스스로를 보호할 수 있도록 위협의 작동 방식을 살펴보겠습니다.
악성 코드는 어떻게 작동하나요?
프로그래밍된 컴퓨터 시스템 구성 요소는 무엇이든 악성 코드로 조작할 수 있습니다. 컴퓨터 네트워킹 인프라와 같은 대규모 구성 요소나 모바일 앱 또는 데스크톱 앱과 같은 작은 구성 요소 모두 흔한 표적입니다. 웹사이트, 온라인 서버와 같은 웹서비스도 표적이 될 수 있습니다. 악성 코드는 다음과 같이 컴퓨터를 사용하여 작동하는 장치를 감염시킵니다.
- 기존 컴퓨터 장치: 데스크톱, 노트북, 휴대전화, 태블릿 등이 있습니다.
- IoT 장치: 스마트 홈 디바이스, 차량 내 인포테인먼트 시스템(IVI)을 예로 들 수 있습니다.
- 컴퓨터 네트워크 장치: 모뎀, 라우터, 서버 등이 있습니다.
공격자는 악성 스크립트와 프로그램을 사용해 컴퓨터 시스템의 신뢰할 수 있는 부분을 침해합니다. 이 지점에서 공격자의 목표는 다음 중 하나를 수행하는 것입니다.
- 사용자를 악성 코드에 노출하여 감염시키고 더 멀리 전파합니다.
- 침해한 시스템에서 비공개 정보에 액세스합니다.
- 침해한 시스템의 사용을 모니터링합니다.
- 시스템에 더 깊숙하게 들어갑니다.
악성 코드는 몇 가지 독특한 문장으로 만들어지고 사용됩니다. 인간의 개입이나 다른 컴퓨터 조치가 있어야 단계마다 다음 이벤트를 트리거할 수 있는 악성 스크립트 코드가 있습니다. 그런데 일부 코드는 완전히 자율적으로 작동하기도 합니다. 대부분의 악성 코드는 다음과 같은 구조를 따릅니다.
- 취약점을 살펴보고 조사합니다.
- 취약점을 공격하는 코드를 작성하여 프로그래밍합니다.
- 컴퓨터 시스템을 악성 코드에 노출시킵니다.
- 관련 프로그램을 통해 또는 스스로 코드를 실행합니다.
조사 및 프로그래밍은 공격을 준비하는 단계입니다. 공격자가 시스템을 침해하기 전에 먼저 침투할 도구를 갖춰야 합니다. 코드가 아직 존재하지 않는다면 코드를 만들어야 하지만 기존 악성 코드를 사용하거나 수정해서 공격을 준비할 수도 있습니다.
악성 스크립팅의 결과는 스스로 활성화할 수 있거나 여러 가지 형태를 띌 수 있는 자동 실행식 애플리케이션 중 하나입니다. 일부에는 JavaScript로 된 매크로와 스크립트, ActiveX 컨트롤, Powershell 악용, 푸시된 콘텐츠, 플러그인, 스크립팅 언어 또는 웹페이지 및 이메일을 강화하도록 만들어진 기타 프로그래밍 언어가 포함될 수 있습니다.
컴퓨팅 시스템의 노출은 USB 같은 직접 인터페이스 포트나 모바일 및 Wi-Fi와 같은 온라인 네트워크 연결을 통해 이루어질 수 있습니다. 성공적인 노출을 위해서는 악성 코드가 시스템으로 이동하는 길만 있으면 됩니다.
널리 퍼진 공격에 대한 노출의 경우 인기 웹사이트, 이메일 스팸과 같이 접촉량이 많은 채널을 이용하는 반면, 표적화된 공격은 스피어 피싱과 같은 소셜 엔지니어링 수법을 사용합니다. 심지어 일부 내부자 공격에서는 로컬 최종 사용자 컴퓨터에 직접 USB 드라이브를 연결하여 기업 인트라넷과 같은 비공개 네트워크에 악성 코드를 심기도 합니다.
실행은 노출된 시스템이 악성 코드와 호환될 때 발생합니다. 표적이 된 장치 또는 시스템이 악성 코드에 노출되면 그 결과 다음과 같은 행위를 시도하는 공격이 이루어질 수 있습니다.
- 데이터 수정: 허용되지 않은 암호화, 보안 약화 등이 있습니다.
- 데이터 삭제 또는 손상: 웹사이트 서버 등이 대상입니다.
- 데이터 획득: 계정 자격 증명, 개인 정보 등을 노립니다.
- 제한된 시스템에 대한 액세스: 비공개 네트워크, 이메일 계정 등이 대상이 됩니다.
- 작업 실행: 자체 복제, 악성 코드 전파, 원격 장치 제어 등이 있습니다.
악성 코드는 어떻게 전파되나요?
시스템 자체를 침해하거나 이차적인 악성 활동을 실행하거나 악성 코드를 복제해 전파하기 위해 악성 코드를 사용할 수 있습니다. 어떤 경우든 원래 코드가 하나의 장치에서 다른 장치로 이동해야 합니다.
이러한 위협은 데이터를 전송하는 거의 모든 커뮤니케이션 채널을 통해 전파될 수 있습니다. 보통 전파 벡터로는 다음이 포함됩니다.
- 온라인 네트워크: 인트라넷, P2P 파일 공유, 공개 인터넷 웹사이트 등이 있습니다.
- 소셜 커뮤니케이션: 이메일, SMS, 푸시 콘텐츠, 모바일 메시지 앱 등이 있습니다.
- 무선 연결: Bluetooth 등이 있습니다.
- 직접 장치 인터페이스: USB 등이 있습니다.
감염된 웹 사이트를 방문하거나, 출처를 알 수 없는 이메일 링크 또는 첨부 파일을 클릭하는 것은 악성 코드가 컴퓨터에 침입하는 표준적인 관문입니다. 그러나 이러한 위협은 명백하게 악성인 출처뿐 아니라 합법적인 출처에서도 들어올 수 있습니다. 공용 USB 충전 스테이션부터 공격 당한 소프트웨어 업데이트까지 모든 것이 이러한 목적으로 악용되고 있습니다.
악성 코드의 '겉포장'이 항상 명확한 것은 아니지만 공용 데이터 연결이나 메시징 서비스는 주목할 만한 가장 중요한 경로입니다. 다운로드와 URL 링크도 공격자가 위험한 코드를 내장하기 위해 자주 사용합니다.
악성 코드의 유형
다양한 유형의 악성 코드가 귀중한 데이터로 가는 진입점을 찾아 컴퓨터에 피해를 입힐 수 있습니다. 이러한 유형이 꾸준히 늘어가는 와중에 흔히 볼 수 있는 범인을 몇 가지 소개하면 다음과 같습니다.
바이러스
바이러스는 자가 복제하는 악성 코드로, 실행을 위해 매크로 지원 프로그램에 연결되어 있습니다. 이러한 파일은 문서나 기타 파일 다운로드를 통해 이동하여 장치에 침투합니다. 바이러스를 실행하면 자체 전파되어 시스템과 연결된 네트워크를 통해 퍼질 수 있습니다.
웜
웜은 바이러스와 같은 자가 복제, 자체 전파 코드이지만 추가적인 작업이 필요하지 않습니다. 컴퓨터 웜이 장치에 들어오면 악성 위협이 완전히 저절로 실행되며 사용자 실행 프로그램의 도움이 전혀 필요하지 않습니다.
트로이 목마
트로이 목마는 악성 코드 페이로드를 옮기는 미끼 파일로, 실행을 위해서는 사용자가 파일 또는 프로그램을 사용해야 합니다. 이러한 위협은 자가 복제하거나 자율적으로 전파되지는 않습니다. 그러나 악성 페이로드에 바이러스, 웜 또는 기타 코드가 포함될 수 있습니다.
크로스 사이트 스크립팅(XSS)
크로스 사이트 스크립팅은 악성 명령을 웹 애플리케이션에 주입하여 사용자의 웹 브라우징을 방해합니다. 웹 콘텐츠를 변경하거나 기밀 정보를 가로채거나 사용자 장치 자체를 감염시키는 경우가 많습니다.
백도어 공격
애플리케이션 백도어 액세스는 공격 당한 시스템에 사이버 범죄자가 원격으로 액세스할 수 있도록 코딩됩니다. 비공개 기업 정보와 같은 민감한 데이터의 노출 이외에도 백도어는 공격자를 지속적으로 진화하는 위협(APT)으로 만들어 줄 수 있습니다.
사이버 범죄자는 새로 획득한 액세스 권한으로 활개치며 컴퓨터의 데이터를 삭제하거나 스파이웨어를 설치할 수 있습니다. 이 위협은 고위 인사에게 도달하기도 합니다. 미국 회계감사원에서는 악성 코드를 국가 안보에 대한 위협으로 경고하기도 했습니다.
악성 코드 공격의 사례
악성 코드는 다양한 형태로 나타날 수 있으며, 이전에도 매우 활발하게 사용되었습니다. 이러한 공격 사례 중 가장 잘 알려진 몇 가지는 다음과 같습니다.
이모텟 트로이 목마
2014년에 처음 등장한 이모텟 트로이 목마는 맬웨어 루트에서 진화하여 악성 코드를 실은 이메일 스팸이 되었습니다. 공격자는 긴급한 이메일 제목(예: "결제 필요")과 같은 피싱 수법을 사용하여 다운로드하도록 사용자를 속입니다.
일단 장치에 진입하면 이모텟은 바이러스를 전달하고 봇넷을 모집하기 위해 C&C(Command and Control) 맬웨어를 설치하는 스크립트를 실행하는 것으로 알려져 있습니다. 이러한 위협은 2018년에 잠시 중단되었으나 다시 돌아와서 프로세스의 SMS 맬웨어 위협이 되었습니다.
스턱스넷 웜
2010년부터 스턱스넷 컴퓨터 웜과 그 후속 버전은 국가 인프라를 표적으로 삼고 있습니다. 처음 문서화된 공격은 USB 플래시 드라이브를 통한 이란 핵시설 공격이었으며, 당시 중요한 장비를 파괴했습니다. 이후 스턱스넷은 중단되었으나 그 소스 코드는 2018년 내내 매우 표적화된 유사한 공격을 만드는 데 사용되었습니다.
악성 코드 공격으로부터 보호하는 방법
대부분의 악의적인 위협에 대해서는 자동 업데이트, 맬웨어 제거 기능, 웹 브라우징 보안이 포함된 안티 바이러스 소프트웨어가 최선의 방어책입니다. 그러나 안티 바이러스 소프트웨어가 있다고 해서 저절로 악성 코드가 방지되는 것은 아닙니다.
안티 바이러스는 보통 바이러스 및 다른 형태의 맬웨어 또는 악성 코드의 하위 카테고리인 악성 소프트웨어를 방지하고 제거합니다. 악성 코드의 더 넓은 카테고리에는 취약점을 공격하여 맬웨어를 업로드할 수 있는 웹사이트 스크립트가 포함됩니다. 당연히 모든 안티 바이러스 보호 기능이 악성 코드로 인한 특정 감염 또는 작업을 모두 치료할 수 있는 것은 아닙니다.
선제적인 감염 제거 및 방어에 여전히 안티 바이러스가 필수적이기는 하지만 아래와 같이 스스로를 보호할 수 있는 다른 중요한 방법도 있습니다.
- 안티 스크립팅 소프트웨어를 설치하여 JavaScript 및 관련 코드가 무단으로 실행되지 않게 방지합니다.
- 링크 및 첨부파일에 대해 경고해 주기도 합니다. URL 링크나 첨부파일이 포함된 이메일이나 문자 메시지와 같은 모든 메시지는 악성 코드의 벡터가 될 수 있습니다.
- 브라우저 팝업 차단기를 활성화하여 스크립트가 원치 않는 브라우저 창을 통해 악성 콘텐츠를 전달하지 못하게 방지합니다.
- 관리자 수준 계정을 일상적으로 사용하지 마십시오. 스크립트와 프로그램을 자동으로 실행하기 위해서는 높은 수준의 권한이 필요한 경우가 많습니다.
- 데이터 백업을 활용하여 대체 불가한 파일과 문서를 보호합니다.
- 공개 데이터 연결을 사용할 때는 주의합니다. USB 연결은 보통 간과하는 경우가 많지만 악성 코드를 쉽게 숨길 수 있습니다. 공개 Wi-Fi도 공격자가 악성 코드를 전달하는 데 사용할 수 있는 일반적인 위협입니다.
- 적절하게 구성된 방화벽을 사용하여 무단 연결을 차단합니다. 악성 코드가 시스템에 침투하고 외부에 연결해 맬웨어 페이로드를 요청할 경우 방화벽이 이를 막는 데 도움이 될 수 있습니다. 방화벽이 기본적으로 차단하도록 구성되어 있는지 확인하고, 신뢰할 수 있고 예상되는 연결은 허용 목록에 등재하십시오.