본문 바로가기
CS/소프트웨어보안

[소프트웨어보안] Ch1-1. 소프트웨어 보안 개념과 악성코드·해킹 동향

by 숨잇 2026. 9. 9.

 

경희대학교 장대희 교수님의 소프트웨어보안 수업 내용을 기반으로 정리한 글입니다.

 

보안의 세 기둥 — CIA

  • 기밀성 (Confidentiality)
    허가된 사람만 정보에 접근할 수 있다. 이 기밀성이 깨지면 개인정보 유출 및 메모리 덤프로 비밀번호 탈취가 가능해짐
  • 무결성 (Integrity)
    정보가 임의로 변조되지 않는다. 이 무결성이 깨지면 펌웨어 변조 및 공급망 공격으로 악성코드 삽입이 가능해짐
  • 가용성 (Availability)
    필요할 때 정상적으로 사용할 수 있다. 이 가용성이 깨지면 DDoS 및 랜섬웨어로 시스템이 마비될 수 있음

랜섬웨어의 경우는 가용성(파일 사용 불가)와 기밀성(정보 유출 압박)을 동시에 공격하는 유형으로, 세 특성 중 하나만 지켜서는 충분하지 않다!

 

 

버그와 해킹의 관계

  • 버그 (Bug)
    개발자의 실수로 인해 발생하며, 모든 프로그램에 존재함.
    개발자가 의도하지 않은 동작을 소프트웨어가 하는 것을 일컫음.
  • 취약점 (Vulnerability)
    보안에 영향을 주는 버그이며, 공격에 악용 가능함.
    소프트웨어 결함뿐 아니라 설정 오류 및 설계 결함도 포함
    발견된 취약점을 관련 기관 혹은 협회에서 평가하여 중요하다 판단되면 CVE 일련번호가 부여됨
    (ex. CVE-202013160 처럼 연도-일련번호 형식)
  • 익스플로잇 (Exploit)
    취악점을 악용하는 코드에 해당하며, 실제 공격 도구로 활용됨
  • 해킹 (Hacking)
    권한 및 정보 탈취로 최종 피해가 발생됨

★ 모든 버그가 취약점인 것이 아니다. 보안에 영향을 주는 버그만 취약점에 해당하며,
그 취약점 중에서 실제 공격에 악용되는 코드가 익스플로잇이다.

화면이 깨지는 버그는 취약점이 아니지만,

입력 길이를 검사하지 않는 버그는 공격자가 실행 흐름을 빼앗을 수 있으므로 취약점에 해당한다.

 

 

익스플로잇 (Exploit)

설계상 결함을 이용해 공격자의 의도된 동작을 수행하도록 만들어진 절차나 일련의 명령, 스크립트, 프로그램 또는 특정한 데이터 조각을 말하며, 이러한 것들을 사용한 공격 행위를 이르기도 한다.

아래와 같이 공격 결과에 따른 분류가 가능하다.

  • 임의 코드 실행 (RCE, Remote Code Execution)
    해킹 공격을 통해서 해커가 원하는 대로 컴퓨터의 명령 코드가 실행이 될 수 있는 것.
    해킹에서 가장 임팩트가 있고 파급력이 큰, 위협적인 행위에 해당함.
예를 들어, 핸드폰 사용자 입장에서 어떤 게임을 앱스토어에서 다운로드 받아 실행했다.
이는 '게임 개발자가 게임을 만든 거지 여기 이상한 코드를 넣지는 않았을 것이다'라고 믿고
실행하는 것!
따라서 임의의 코드를 실행하는 게 아니라 내가 신뢰하는 프로그램을 실행한 것이다.
하지만 위 예시와 다르게,
어떤 의도도 없이 단순 웹서핑 중에 광고 링크 같은 걸 발견해서 클릭했다.
그런데 알고 보니까 나도 모르게 설치된 어떤 프로그램이 실행이 되면서
내 정보를 어디서 다 빼가고 있고 이상한 나쁜 짓을 하더라 라고 하는 해킹이 발생한다면,
이 경우가 이제 임의의 코드 실행이 된 것!

링크 클릭한 행위를 통해 해커가 원격에서, 정상적인 절차를 거치지 않고
인위적으로 내 시스템 안에다가 코드를 집어넣어서 실행을 해버리는 것이다.
  • 권한 상승
    이미 프로그램을 실행시킬 권한이 있는 상태에서, 즉 일부 권한만 있던 상태에서 모든 행동을 다 할 수 있는 권한으로 권한 상승이 되는 것을 의미 
  • 정보 노출
    데이터베이스 털리는 SQL Injection이나 악성코드를 프로그램 안에 넣는 건 아니지만 뭔가를 훔쳐볼 수 있는 그런 경우가 대표적 사례에 해당
  • 서비스 거부 (DoS)
    특정 시스템을 마비시키고 방해하려는 의도로 공격을 하는 것

 

PoC와 무기화

취약점의 존재를 증명하는 최소 코드를 PoC(Proof of Concept)라 하고, 이를 실제 공격에 쓸 수 있도록 다듬는 것을 무기화(Weaponize)라 한다.

실제로 파괴적인 행동을 하는 것은 아니지만 공격이 될 수 있음을 증명하는 코드 (익스플로잇의 최소 코드). 따라서 실제 공격적인 해킹을 하기 위해서는 PoC를 고도화하는 작업이 필요하다.

 

 

제로데이(Zero-day)

패치가 아직 없는, 공개되지 않은 소프트웨어 취약점을 말한다.

개발사가 대응할 시간이 0일(day) 이라는 뜻으로, 방어가 어렵다.

취약점 공개 후에는 1-day / N-day라 부른다.

방어가 사실상 불가능하기에 매우 높은 가치를 지니며, 국가 · 범죄 조직이 수억 원에 거래되기도 한다.

 

하지만 1-day가 더 위험할 때도 있다.

취약점이 공개되더라도 모든 시스템이 즉시 패치되지 않기 때문에 공격자가 그 시간차를 노리는 것이다.

제로데이는 "보안 결함이 처음 알려진 순간"이고,

1-day는 "그 결함이 공개된 뒤 아직 패치를 적용하지 않아 위험이 지속되는 기간"이라고 볼 수 있다.

Ex. Log4j(2021)가 2022년 랜섬웨어에 재활용된 것이 대표적

Log4j(CVE-2021-44228, 흔히 "Log4Shell") : JAVA 로깅 라이브러리 Log4j 2.x의 취약점
로그 메시지 안에 악의적으로 조작된 입력을 로깅할 때,
공격자가 RCE를 수행할 수 있도록 하는 JNDI(네트워크 서비스 검색) 로딩 취약점

즉, 로그에 특정 문자열이 들어가면 공격자가 원격으로 임의의 코드 실행 가능함
공격자가 서버에 원격으로 코드 실행 권한을 얻어 시스템 탈취 및 정보 유출 등의 공격 가능

 

 

CVE(Common Vulnerabilities and Exposures) 일련 번호

공개된 취약점에 부여하는 고유 식별 번호.

전세계가 같은 번호로 동일한 취약점을 지칭함

CNA(Apache·삼성 등)가 번호를 할당하며 CVSS 점수로 그 심각도의 0~10점으로 표시함

CNA(CVE Numbering Authority)는 CVE 번호를 사전에 관리하고 발급하는 기관

각 CNA는 특정 조직이나 지역에서 CVE ID를 배정하고 관리하는 권한을 가짐
Apache 같은 오픈소스 프로젝트나 대기업의 보안 팀이 특정 취약점에 대해 CVE를 발급받아 등록
CVSS(Common Vulnerability Scoring System)는
보안 취약점의 심각도를 표준화된 점수로 표현한 체계

CVE ID를 받는 것과 CVSS 점수 매기는 것은 서로 다른 주체의 작업
CNA는 CVE ID를 배정하고 관리하는 역할을 하지만, CVSS 점수는 보통 보안 연구자, 보안 도구, 공공 데이터베이스(ex. NVD)에서 산정함