CS/정보보호

5. 악성코드와 해킹

arsenic-dev 2025. 6. 14. 18:32

경희대학교 장대희 교수님의 정보보호 수업을 기반으로 정리한 글입니다.

악성코드의 파급력

악성코드란 무엇인가?

Software with "malicious intention"

  • Ransomware: 정보를 인질로 잡고 돈을 요구
  • Bitcoin Miner: 사용자의 컴퓨터 자원을 몰래 이용해 암호화폐(비트코인 등)를 채굴
  • Adware: 사용자의 동의 없이 광고를 무작위로 표시하거나 광고 수익을 위해 정보를 수집
  • Infostealer: 사용자 컴퓨터에서 로그인 정보, 쿠키, 지갑 등 민감한 데이터를 훔쳐 공격자에게 전송
  • etc

▶ Ransomware에 감염된 윈도우 PC에서 뜨게 되는 실제 화면 창의 예시

 

과거의 악성 코드들은 정보를 훔쳐가는 것이 위주였는데, 이제는 중요한 파일이 컴퓨터에 많으니 이 파일을 암호라는 메커니즘을 통해 못 쓰게 한다고 협학하고 다시 복구시키고 싶으면 돈을 내라는 형태로 바뀌었다.

 

이게 가능해진 이유 중 하나가 비트코인이다. (익명 돈 거래)

 

※ 과거에는 기술적인 면에서 코드 자체의 모양새가 일반 소프트웨어와 다르다, 이런 개념이 좀 있었는데 요즘 소프트웨어는 복잡해서 생김새만 봐서 단순히 악성이고, 아니고를 얘기하기는 어렵다. 또한, 악성 코드의 종류 구분이 모호해지고 있다.

과거의 유명 악성코드

SQL Slammer

2003년, 인터넷 초창기라 인터넷이 단순하고 보안 이런 게 전혀 없던 시절의 바이러스로, (허술한 보안)

지금의 악성코드나 바이러스하고는 상대도 할 수 없을 정도로 단순하고 심플하다. 

 

특정 서버를 감역시키고, 그 서버에 연결된 네트워크를 타서 또 다른 서버로 가 그걸 또 감염시키고,

이러한 SQL Slammer Virus는 결과적으로 전세계 인터넷 마비를 야기했다. (목적: 테러)

 

지금은 있을 수 없는 일이지만, 과거에는 네트워크 관리도 지금과는 전혀 다르다 보니, 이 악성코드가 네트워크 상에 그냥 감염된 트래픽만 뿌리는 것만으로도 인터넷을 다 다운 시켜버릴 수 있을 정도의 파급력이 있었다.

SQL Slammer를 통해 감염된 것으로 추정되는 전세계적인 서버의 위치를 시각화

 

인터넷나야나 사건

2017년 6월, 대한민국의 웹 호스팅 업체인 인터넷나야나(리눅스에서 웹 서버 관리)의 웹 서버 및 백업 서버 153대가 랜섬웨어의 일종인 에레버스(Erebus)의 리눅스용 변종에 일제히 감염된 사건으로, 대한민국에서 호스팅 업체가 랜섬웨어에 감염된 것은 인터넷 나야나가 최초이다.

 

다 퍼져나가는 식으로 공격인 된 SQL Slammer와 달리, 여기서는 설계가 되어 굉장히 타겟팅되었다는 차이가 있다.

최적의 돈 뜯기를 위해 공격하고자 하는 희생자에 대한 면밀한 조사를 진행했음을 알 수 있음

 

한수원 해킹

돈이 목적이 아니라, 정보 탈취가 목적인 국가 차원에서의 해킹도 많다.

해당 사건은 북한의 소행이었는데, 국가 차원의 해킹의 경우 대부분 북한이나 중국의 소행인 경우가 많다.

▶ 북한 해커가 망에 침투해 악성코드를 심어 정보 탈취

 

Stuxnet

스턱스넷은 이란에서 등장한 2010년도의 악성코드로 원자력 핵 발전소 붕괴와 연계된 사건이다.

 

기존에 악성 코드는 아무리 피해를 일으켜 봤자 금전적인 피해나 정보 유출, 혹은 서비스를 못 쓰게하는 것까지만 일으킬 수 있었다고 생각했지만, 악성 코드로 핵폭탄도 터뜨릴 수 있겠구나, 이런 생각을 하게 만든 게 스턱스넷이다.

 

이러한 스턱스넷은 최초의 원자력발전소 SCADA(스카다) 망에 침투한 해킹 사건으로,

윈도우 제로데이 취약점 이용하여 뚫고 들어가 루트킷 설치를 통해 계속 숨어 있는 이슈도 있었다.

  • 0-day: 보안 취약점이 누군가에게 발견되었지만, 개발사(당사자)는 아직 알지 못해 패치가 존재하지 않는 상태
  • 루트킷: 악성코드나 해커의 존재를 숨기기 위해 시스템 깊숙이 침투하는 은폐용 악성 소프트웨어

※ 스카다 망: 산업 발전소를 관리하는 특수한 시스템

  • 원자력발전소 스카다 망: 원자력 발전소를 관리하며 장치 제어하는 특수한 시스템

BPFDoor (SKT 해킹)

BPFDoor는 천 줄도 안 되는 C 코드 파일 하나로, 굉장히 간단한 경량의 리눅스 악성코드이다.

 

이 악성코드는 BPF라는 리눅스 커널의 기능을 활용해서 방화벽에서도 숨어가며 탐지를 안 당하면서,

해커한테 모든 권한을 주는 기능을 수행한다.

  • 백도어: 공격자가 시스템에 몰래 다시 접근할 수 있도록 만들어 놓은 비밀 통로
  • BPF (Berkeley Packet Filter): 리눅스 커널에서의 패킷 필터로, 리눅스의 네트워크 패킷을 효율적으로 필터링하거나 분석하기 위한 커널 수준의 기능

▶ SKT 해킹 사건

  • HSS 서버가 해킹을 당해 여기에 BPFDoor 악성코드가 침투
  • 이 안에 있는 유심 관련 중요 정보들이 털림
  • 털린 정보를 가지고 복제폰도 만들 수 있는 상황 (복제폰 -> 2차 인증 무력화)

여기서 놀란 이유 중 하나는 Home Network라는 곳이 폐쇄망이고 내부망이라는 점이다.

즉, 원래 외부에서 누가 접속할 방법이 없는 시스템인데 여기에 악성 코드가 대체 어떻게 들어간 것인지 의문이 제기되고 있다.

 

해킹이라는 게 꼭 침투할 수 있게 인터넷이 열려 있고 웹페이지가 있어서 거기다 이상한 짓을 해서 들어가는 방법만 있는 게 아니라, 공급망이라는 해킹 채널이 있기 때문에 이렇게 폐쇄된 네트워크여도 안심을 할 수 없다.

  • 공급망 해킹: 기업이 사용하는 외부 소프트웨어나 장비를 먼저 해킹해 내부로 침투하는 간접 공격 방식

또한, 악성 코드를 만드는 것 자체는 어렵지 않고, 악성코드를 넣는 게 어려운 것이다.

 

※ HSS 서버: Home Subscriber Server는 통신사의 유심 가입자 정보를 저장하고 인증을 담당하는 핵심 서버이다.

악성코드의 정의 및 종류

악성코드란?

이미 알려진 악성코드에 대해선 백신이 스캐닝을 통해 검사를 하여 찾을 수 있지만, (파일 시그니처 존재 여부 확인)

한 번도 알려진 적 없는 최초의 악성 코드는 이런 식의 기술적인 분류로 잡기는 매우 어렵다.

 

때문에 특정 패턴을 보는 게 아니라 그 어플리케이션이 하는 행동을 관찰하여 악성 행위를 하느냐, 아니면 좋은 행위를 하느냐의 동작을 통해 악성 코드를 잡겠다는 연구 시도를 많이 했었다. 하지만 결론은 악성은 주관적이라 정의하기가 어려워 이런 식으로 악성 코드를 판단하는 것이 거의 불가능하다는 게 결론이었다.

  • 광고앱은 악성코드인가?
  • 게임은 악성코드인가?
  • 원격제어 앱은 악성코드인가?

그래서 기능과 행위만 보고 분류하기는 어렵고, 결국 사람이 종합적으로 판단하고, 그 판단했던 파일에 대한 시그니처를 데이터베이스에 넣어 스캐닝할 수 있도록 하는 것이 아직까지도 주된 악성 코드 대응 방법이다.

악성코드의 종류

백도어

비밀의 뒷문으로 누군가 들락날락할 수 있는 구멍으로, 이를 통해 컴퓨터 시스템에서 아무도 모르게 출입이 가능하도록 하는 악성코드이다. 즉, 백도어형 악성 코드는 들키지 않고 몰래 숨어 들어 악성 행위를 하는 코드이다.

 

그래서 정상적인 인증 과정이나 접속을 하기 위한 절차를 다 무시하고 비밀의 채널을 통해 해커한테 시스템을 장악할 수 있는 방법을 주는 모든 종류의 악성코드를 백도어라고 부른다.

 

백도어 사례) NSA의 Intel ME 백도어

NSA(미국 국방부 산하의 정보기관)에서 RSA를 무조건 뚫고 몰래 들어갈 수 있는 백도어를 넣어,

암호화를 해놓은 것도 NSA에서 다 들여다보며 관찰하고 감시하고 있었다. (NSA는 백도어를 많이 한 걸로 악명이 높음)

 

이때 수학은 매우 강력하여 수학이 깨져 암호가 문제가 되는 일은 굉장히 적어, 암호를 수학적으로 깼다는 의미는 아니고,

대신에 그 암호화 알고리즘을 구현하는 소프트웨어에 버그를 심거나 소프트웨어 구현 코드에 조작을 가했다는 의미이다.

▶ NSA는 일반적으로 PC에 악성 코드를 설치하는 수준이 아니라 CPU 하드웨어 내부의 기능으로 백도어를 만든 적도 존재

 

특정 세대의 어떤 CPU 안에는 또 다른 컴퓨터의 개념으로 매니지먼트 엔진이라는 기능이 있다.

쉽게 말하면 CPU 속에 또 CPU가 있다는 의미인데, 그 CPU 칩 속에 숨어 들어 있는 어떤 특정 CPU가 원래는 좋은 일을 하자는 취지로 하드웨어에서 제공되는 기능인데, 여기서 메모리랑 디스크, 네트워크, 특정 컴퓨터 안에서 소프트웨어가 무슨 짓을 하는지 등을 들여다 보며 들키지 않으면서 정보를 훔쳐갈 수 있는 백도어를 만들었다. 

 

이외에도, NSA는 케이블 속에서 숨겨놓고, USB에도 숨겨 놓는 등 비밀리에 집어 넣어 정보를 훔쳐가는 도구의 집합체가 있다.

 

위장 앱

▶ 가짜 앱으로 위장하는 악성코드

 

위장 앱 악성코드는 숨는 식이 아니라, 오히려 위장하여 당당하게 본인을 광고한다.

이렇게 위장해서 사람들이 이 앱을 설치하게 유도하는데, 실제로 이 속엔 악성 기능이 있는 그런 식이다.

 

랜섬웨어

▶ 정보를 인질로 비트코인 요구

 

랜섬웨어는 어떤 식으로 감염이 되느냐를 떠나서 결과적으로 시스템에 침투한 이후 하는 행동에 따라 랜섬웨어로 구분한다.

침투 이후의 행위가 정보를 훔쳐가고 이런 게 아니라, 정보를 인질로 잡고 비트코인을 내놔라, 이런 행동을 하는 게 랜섬웨어이다.

▶ Crypto Locker 악성코드 (2013)

  • 암호화 사용
  • 랜섬웨어들 중 초기 악성코드

랜섬웨어가 사용하는 암호화의 핵심은 비대칭 암호화이다.

때문에 대칭 암호화만 있고 비대칭 암호화가 없다면 랜섬웨어도 만들 수 없다.

 

만약 대칭 암호화를 써서 암호화를 하게 되면, 키 없이는 암호화를 할 수없기에 반드시 랜섬웨어 파일 안에 키가 존재하거나 인터넷에서 키를 가져 오기 위한 메커니즘이 있거나, 하는 방식이 있을 수 밖에 없다.

그렇기에 분석의 난이도는 높지만 대칭 암호화는 암호화 키와 복호화 키가 같기에, 소프트웨어 역공학을 통해 복구하여 키를 다시 찾을 수 있다. 비대칭 암호화의 경우엔 랜섬웨어가 사용한 퍼블릭 키를 봐봤자 프라이빗 키를 모르기에 의미가 없다.

  • e.g, 랜섬웨어로 내 컴퓨터의 파일들이 암호화되면, 암호화 시 사용한 키가 내 컴퓨터 어딘가에 존재

※ 기타 악성코드

  • 애드웨어(Adware): 사용자 동의 없이 광고를 표시하거나 수익을 얻기 위해 광고를 삽입하는 악성 소프트웨어 (브라우저 탈취)
  • 키로거(Keylogger): 사용자의 키보드 입력을 몰래 기록하여 비밀번호나 개인정보를 탈취하는 악성코드

컴퓨터 바이러스 통로

비기술적 해킹

사회 공학 기법으로, 사람의 심리를 악용하여 정보를 탈취하거나 악성코드를 설치하도록 유도하는 해킹 방식이다.

이는 사람을 기만하거나 속여 실수하거나 판단 미스가 일어나도록, 혹은 시스템 부품을 직접 교체하는 등 물리적 접근을 통해 이루어진다. 기술은 별게 없지만 그만큼 훨씬 쉽고 효과적이기에 피싱 메일, 스팸 문자 등이 여전히 사용되고 있다.

 

autoexec.bat

지금과 비교하여 해킹이 쉬웠던 과거엔, autoexec.bat과 같은 특정 파일들이 디스크 같은 장치에 존재하면,

해당 장치를 꽂기만 해도 자동 실행되는 경우가 많았다.

 

autorun.inf

지금도 CD-ROM에 대해서는 autorun.inf 파일이 디스크에 있으면 Windows가 자동 실행한다.

물론, 이제는 CD에 대해서만 예외적으로 허용되고, Windows 7부터는 이 기능도 기본적으로 차단되었다.

 

옛날에는 OS를 다 신뢰하고 믿고 썼지만 이제는 디스크 혹은 데이터를 줬는데 그 안에 뭔가 자동으로 실행된다면, 보안상 아주 민감한 문제가 되어 이제는 막아버린다. 그렇기에 이렇게 자동 실행 기능을 통해 악성 코드를 유포하는 것은 요즘은 이제 거의 다 막혔다.

 

※ CD-ROM은 Read Only Memory의 약자로, 읽기 전용이라 조작이 불가능하기 때문에 autorun.inf 자동 실행을 허용한다.

 

매크로 바이러스

과거엔 문서파일(e.g., Excel, PowerPoint)에 매크로(실행 스크립트)를 삽입해두면, 사용자가 문서를 여는 순간 자동으로 매크로가 실행되었다. 하지만 지금은 이런 자동 실행이 모두 차단되었다.

 

심지어 매크로가 실행된다고 해서 당장 해킹을 당하는 게 아니라 해킹 당할 위험이 증가하는 정도임에도 다 허락을 받아야만 실행할 수 있게 바뀌었다. 그래서 요즘엔 문서 파일을 열면 보안 경고가 뜨고 사용자가 직접 '실행' 버튼을 클릭해야 매크로가 실행된다. 과거에는 이런 경고 기능 없이 바로 실행됐기 때문에, 매크로 기능을 통한 악성코드 유포가 아주 많았지만 요즘엔 잘 없다.

 

※ 매크로 예시: word - 자동 문서 서식 지정, PowerPoint - 모든 슬라이드에 회사 로고 삽입

 

※ 수강신청시 매크로 방지로 스페이스바 사용을 막는 이유는 매크로가 사람처럼 입력하는 걸 흉내 내기 위해 공백 키를 자주 사용하기 때문이다.

 

이메일

악성코드를 파일 첨부하여 거짓말 하는 것을 말한다.

  • ex) 관리 부서인데 해당 프로그램 설치하세요, 학교 PC 보호를 위해 파일을 받아 설치하세요

트로이의 목마

다른 정상적인 프로그램으로 위장해서 침투하는 악성코드의 유형이다.

▶ 트로이의 목마

 

이 명칭은 그리스 로마 신화에서의 이야기에 본바탕을 둔다. 당시 그리스 군은 트로이 성에 거대한 나무 말을 선물로 주며 항복하는 척 위장했고, 그 안에 무장 병사들을 숨겨 성 안으로 침투했다. 이 개념을 그대로 컴퓨터 악성코드에 적용한 것이 트로이의 목마다.

 

공급망 해킹

시스템이 만들어지기 전, 즉 빌드하고 만들 때부터 해킹을 미리하는 것이다.

이렇게 되면 아무리 시스템을 다 만들고 방화벽을 구축하고 보안 관리를 해도 처음부터 해킹 당한 상태이기에 소용이 없다.

 

SBOM (Software Bill of Materials)

소프트웨어 제작 전 과정을 모두 트랙해서 유통 과정부터 해킹 당할 여지가 없었나를 확인하는 리스트이다.

이는 공급망에 백도어를 처음부터 심는 공급망 해킹을 막기 위해서이다.

비기술적 해킹 항목 설명 역할 감염 방식
autoexec.bat 부팅 시 자동 실행되는 배치 파일 시스템 시작 자동 명령 실행 PC 부팅 시 악성코드 실행 유도
autorun.inf 외부 저장장치 자동 실행 설정 파일 USB/CD 연결 시 특정 프로그램 자동 실행 장치 연결 시 바이러스 자동 실행
매크로 바이러스 Word/Excel 문서에 포함된 자동 실행 코드 반복 작업 자동화 기능 악용 문서 열 때 매크로 실행으로 감염
이메일 사용자가 여는 첨부파일 또는 링크 피싱 메일, 첨부파일, 클릭 유도 첨부파일 실행 또는 링크 클릭 유도
트로이의 목마 겉으론 정상처럼 보이는 악성코드 위장된 실행파일 또는 소프트웨어 사용자가 직접 설치 및 실행하게 유도 
공급망 해킹 신뢰된 업체/제품에 악성코드 삽입 업데이트/설치파일에 숨겨진 악성 요소 믿고 설치한 소프트웨어 통해 감염

 

바이러스 차단 예시 

▶ G메일 바이러스 필터

  • 클릭 한 번에 설치가 되는 위험성이 있는 파일은 애초에 파일 첨부 자체가 불가

압축 파일의 경우도 다 열어보고 스캐닝한다. 때문에 현재로서 이런 거를 첨부하는 방법은 압축할 때 암호화를 해서 압축하는 방법밖에 없다. 그래야만 스캐닝을 못 하게 함으로써 위험한 파일을 첨부할 수 있게 된다.

 

※ malware: malicious software(악성 소프트웨어)의 줄임말이다.

기술적 해킹

시스템, 네트워크, 소프트웨어의 보안 취약점을 이용해 침투하거나 바이러스를 유포하는 해킹 방식이다.

  • 주된 타겟 (침투 당할 수 있는 소프트웨어): 웹브라우저, 운영체제 (커널), 문서 편집기, 한글, 동영상 편집기

복잡하고 기능이 많을수록 숨은 취약점이 있을 가능성이 높고, 단순한 소프트웨어라면 오히려 모든 코드를 완벽하게 짤 수 있다.

 

또한, 기술적인 취약점을 찾았다, 뚫었다 이런 걸 시연할 때 항상 계산기를 띄우는 전통이 있다.

계산기를 띄웠다는 의미는 악성코드를 띄울 수 있다는 의미로, 침투 능력을 보여준다.

 

0-day 취약점: 알려지지 않은 취약점 (처음 발견한 경우) -> 위험도 높음

1-day 취약점: 알려진 취약점

 

이러한 악성코드는 침투 이후, 얼마나 오래 시스템에 머무를 수 있는지, 즉 지속성이 중요하다.

때문에 재부팅을 하든, OS를 재설치하든, 파일을 다 삭제하든 유지되는 게 악성코드들의 목표이다.

  • Windows의 경우 레지스트리에 악성코드 본인을 등록하면 재부팅하더라도 특정 레지스트리에 있는 명령어가 계속 자동 실행
  • Windows에서 자동 실행되는 프로그램을 변조해 그 속에 아예 박혀 들어감
  • 루트킷: OS 자체를 변조 -> 대응 방법 X

결론

악성코드의 정의, 분류는 주관성으로 인해 어렵다.

 

악성코드는 금융 범죄와 밀접한 관계

  • 개인정보 수집 -> 광고 업체에 판매
  • 랜섬웨어 -> 돈 요구
  • 애드웨어 -> 광고 수익
  • 마이닝봇 -> 비트코인 채굴 (CPU 훔쳐 비트코인 채굴)

이러한 악성코드는 기술적 (취약점 악용), 비기술적 방식 (사람을 속임) 모두를 이용하여 전파가 가능하다.

여기서 비기술적 해킹, 기술적 해킹 경계는 모호해지고 있다.

 

또한, 악성코드 사고들은 정부 차원의 보안 정책에 큰 영향을 주게 된다. (보안관련 교육, 해킹대회)

 

※ 개념 설명

  • 난독화: 코드나 데이터를 의도적으로 어렵게 만들어 분석과 역공학을 어렵게 하는 기술
  • 안티 디버깅: 디버거의 존재를 탐지하거나 방해해서 악성코드 분석을 어렵게 만드는 기법