전체상품목록 바로가기

본문 바로가기

 
신규가입 3,000P 지급
현재 위치
  1. 게시판
  2. 자주 묻는 질문

자주 묻는 질문

 

게시판 상세
제목 [AhnLab] 프로그램 취약점에 관한 오해와 이해
작성자 (주)소프트정보서비스 (ip:)
  • 평점 0점  
  • 작성일 2019-06-20
  • 추천 추천하기
  • 조회수 460

“출처가 불분명한 이메일 및 첨부 파일을 열어보지 않도록 합니다”

“사용 중인 프로그램을 항상 최신 버전으로 업데이트하시기 바랍니다”

[긴급 공지] 신규 취약점 해결을 위한 패치 업데이트

 

은행 사이트나 온라인 쇼핑몰, 또는 회사의 사내게시판 등에서 한 번쯤은 보았던 내용들이다. 이들은 모두 소프트웨어, 즉 프로그램 취약점을 이용한 공격을 예방하기 위한 보안 권고 사항 또는 보안 수칙이다. 하지만 그 의미를 이해하고 행동으로 옮기는 사람은 그리 많지 않다. 보안 수칙이 실천으로 이어지려면 충분한 이해가 먼저일 터. 그러려면 이러한 보안 수칙이 나온 배경, 즉 ‘프로그램 취약점’에 대한 설명이 필요하다. 이 글에서는 일반 사용자들을 위해 프로그램 취약점이란 무엇인지, 이것에 대비하는 것이 왜 중요한지 알아본다.

 

 

 

이름부터 어려운 ‘프로그램 취약점’이란?

컴퓨터 프로그래밍에 대한 지식이나 관심이 있는 사람이 아니라면 대부분은 프로그램 ‘취약점(Vulnerability)’이라는 것을 이해하기 쉽지 않다. 사실 일반 사용자가 프로그램 취약점을 기술적으로 이해할 필요는 거의 없다. 그러다 보니 프로그램 취약점이라는 말을 들어도 대부분 그냥 지나치거나 간혹 ‘애초에 취약점이 없도록 프로그램을 만들어야 하는 것이 아닌가’라는 의문을 표하기도 한다.

 

현실적으로 취약점 없이 100% 완벽한 프로그램은 존재하지 않는다. 세계 최고 수준의 프로그램 개발자들을 보유하고, 수많은 품질 테스트(QA)를 실시하고 있는 글로벌 소프트웨어 기업들도 취약점 없는 완전무결한 프로그램을 만들지 못한다. 대신 프로그램 출시 후 지속적인 모니터링이나 보안 연구자들의 제보를 받아 취약점을 확인 및 수정하여 패치나 업그레이드를 배포한다.

 

이 글에서는 프로그램 취약점에 대한 일반인들의 오해를 해소하는 한편, 프로그램 패치를 적용하라는 보안 수칙을 지키는 것이 왜 중요한지 알아본다. 단, 컴퓨터 프로그래밍에 대한 전문 지식이 없는 일반 사용자들의 흥미와 이해를 돕기 위해 상세한 기술적인 설명을 생략하거나 일부 과정에 대해 의도적인 비약이 있음을 미리 밝혀둔다.

 

악성코드라고 다 같은 악성코드가 아니다?

프로그램 취약점을 설명하기에 앞서 악성코드의 종류에 대해 이해할 필요가 있다. 악성코드는 크게 두 가지로 분류할 수 있다. 악의적인 개발자, 즉 공격자가 만든 프로그램을 사용자가 직접 실행하게 유도하는 악성코드와 일반적인 개발자가 정상적인 목적으로 만든 일반 프로그램에 존재하는 취약점을 파고드는 악성코드가 그것이다.

 

첫 번째 유형의 악성코드에 대해 좀 더 자세히 알아보기 위해 많은 사람들이 사용하는 워드 프로그램을 예로 들어 살펴보자. 마이크로소프트(Microsoft)사에서 제공하는 정품 MS워드(MS Word) 프로그램의 코드가 다음과 같다고 가정한다. 이해를 돕기 위해 비약적으로 간추린 [그림 1]의 코드를 보면, 워드 프로그램은 대략 ▲워드 문서 파일(.doc, .docx)을 해석하여 내용을 보여주는 기능 ▲편집 기능과 파일 저장을 수행하는 코드 등으로 구성되어 있다.

 

  

[그림 1] 정품 워드 프로그램의 코드(예시)

 

여전히 많은 사용자들이 MS에서 판매하는 정품 프로그램 대신 웹 사이트나 카페, P2P 사이트 등을 통해 소위 ‘크랙(crack)’ 또는 ‘해적판’으로 불리는 불법 프로그램을 사용하고 있다. 이때 대부분의 사용자들은 프로그램의 코드가 어떻게 구성되어 있는지 알지 못하기 때문에 아이콘이나 파일 사이즈(용량) 정도로 자신이 이용하고 있는 프로그램이 정상 프로그램이라고 생각하기 마련이다. 그런데 만일 사용자가 어디선가 다운받은 불법 프로그램의 코드가 [그림 2]와 같다면 어떤 일이 생길까?

 

  

[그림 2] 정품 워드 프로그램과 불법 프로그램의 코드 비교(예시)

 

사용자가 다운받은 워드 프로그램의 코드가 [그림 2]의 오른쪽과 같다면 이 프로그램은 워드 프로그램의 기능과 전혀 무관한, 즉 ‘바이러스를 다운로드하는(download virus)’ 비정상적인 행위를 한다. 실제 경우라면 사용자로서는 이러한 비정상적인 행위를 짐작조차 하기 어렵다. 왜냐하면 대부분의 코드가 실제 정품 프로그램과 동일할 뿐만 아니라 사용자에게 보이지 않는 수면 아래에서 비정상적인 일, 즉 악성 행위가 수행되기 때문이다. 악의적인 의도를 가진 불법 프로그램 제작자들은 종종 이런 방식으로 악성 행위를 수행하는 코드를 프로그램 사이에 넣어 놓는다.

 

이와 같은 불법 프로그램에 의한 피해를 예방하기 위해 강조되는 가장 기본적인 보안 수칙이 바로 ‘정품 소프트웨어를 사용하고 출처가 불분명한 프로그램을 다운로드하지 않는다’이다. 이처럼 간단한 보안 수칙이자 상식을 지키는 것만으로도 수많은 악성코드를 예방할 수 있다.

 

프로그램 취약점을 파고든 악성코드, 도대체 어떻게?

이제 본격적으로 ‘프로그램 취약점’에 대해 알아보자. 안타까운 일이지만 우리가 정상 프로그램만 사용하더라도 악성코드에 감염될 수 있다. 왜 그럴까? 그 이유에 대해 설명하기 전에 지금까지 살펴본 내용으로 복잡해진 뇌에 잠시 휴식을 주자. 다음은 한때 인터넷에 회자된 바 있는 한 초등학교의 ‘자연’ 과목 시험 문제이다.

 

[ 문제 ] 개미를 세 등분으로 나누면 (  ), (  ), (  )

 

당연히 정답은 (머리), (가슴), (배)이지만, 한 초등학생이 내놓은 답은 다음과 같았다.

 

[ 답 ] 개미를 세 등분으로 나누면 (죽), (는), (다)

 

한편으론 순수하고, 따지고 보면 맞는 말이기도 하지만 출제 의도와 맞지 않기 때문에 아마도 정답으로 인정되지 않았을 것이다. 그런데 만일 이와 같은 상황이 컴퓨터 프로그램 상에서 발생한다면 정답으로 인정될 수도 있다. 프로그램 개발자가 따로 이런 상황을 고려해 두지 않았다면 모두 정답으로 처리된다. 단순한 예를 들어 설명했지만 실제로는 이런 점이 프로그램에 심각한 문제를 야기할 수 있다.

 

어떤 일정 관리 프로그램이 있다고 가정해보자. 이 프로그램은 미팅 등을 위해 누군가 나와 약속을 잡으면 예약 알림을 보여주는데, 대략 다음과 같이 동작한다.

1) 일정을 요청한 상대방이 지금부터 몇 분 후에 알림을 노출할 것인지 숫자를 입력한다.

2) 입력된 숫자만큼의 시간이 지난 후에 “곧 회의입니다” 라는 알림창이 내 화면에 나타난다.

 

예를 들어 상대방이 약속 시간 10분 후에 알림을 보내고 싶다면 다음과 같이 진행된다.  

 

[그림 3] 일정 관리 프로그램 동작 방식(예시) 

 

이 프로그램의 목적은 사용자가 일정을 잊지 않도록 알림을 제공하기 위함이고 프로그램 내부에 어떠한 악의적인 코드도 포함되어 있지 않다. 따라서 이 프로그램은 앞서 살펴본 사례와 달리 프로그램 자체가 악의적인 행위를 수행하지 않을 것으로 보인다. 그러나 만일 상대방이 어떤 악의적인 의도를 가진 사람이 [그림 4]와 같은 값을 입력했다고 생각해보자.

   

[그림 4] 악의적인 의도에 의한 입력 값 적용 

 

만일 이 프로그램의 개발자가 입력 값에 대한 적절히 고려하지 않았다면 이 경우 해당 프로그램은 [그림 5]와 같은 방식으로 동작하게 된다.

 

  

[그림 5] 정상 프로그램의 악성 행위 동작 과정

 

즉, 프로그램의 실제 목적과는 무관하게 공격자가 원하는 악성 행위를 수행하게 되는 것이다. 이러한 프로그램 상의 오류를 바로 ‘취약점’이라고 부른다. 프로그램을 제작함에 있어 항상 예상했던 입력 값만 들어올 것이라고 생각해서는 안되는 이유도 바로 이 때문이다.

 

워드 프로그램의 취약점도 이와 같다. 프로그램의 관점에서 문서 파일이란 일종의 입력 값이다. 단지 내용이 이미 입력되어 있기 때문에 입력 값처럼 느껴지지 않을 뿐이다. 워드 프로그램의 관점에서 문서 파일을 여는 행위는 검증되지 않은 입력을 받는 것과 같다.

 

  

[그림 6] 워드 프로그램의 취약점을 이용한 문서 파일(예시)

 

많은 사람들이 자주 이용하는 동영상 프로그램 역시 취약점을 이용한 공격 수단이 될 수 있다. 예를 들어, 동영상 프로그램이 동영상 파일을 읽는 코드에 존재하는 취약점을 이용해 프로그램의 의도와는 전혀 무관한 작업을 실행할 수 있다. 실제로 이와 관련한 보안 연구자의 시연 동영상도 쉽게 찾을 수 있다. (*시연 영상(유튜브): https://youtu.be/bE1lxmwPgRQ)

 

프로그램 취약점 공격, 어떻게 예방할 수 있을까?

그렇다면 프로그램 취약점을 악용하는 것을 방지하려면 어떻게 해야할까? 이를 위해서는 프로그램 개발자(제공 업체)와 사용자 양쪽의 노력이 필요하다.

 

우선, 프로그램 개발자는 최대한 다양한 경우를 고려해 취약점이 발생할 수 있는 조건을 최소화는 것은 기본. 만일 취약점이 발견되면 최대한 빨리 이를 수정하여 패치(patch)를 배포해야 한다. 위에서 예로 들었던 일정 관리 프로그램의 경우라면, 입력 값이 자연수가 아닌 경우에는 입력 값을 받아들이지 않도록 프로그램을 수정하면 된다. 즉, [그림 7]과 같이 입력 값이 자연수(Number)인지 확인하는 루틴을 추가해 자연수가 아닐 경우에는 프로그램이 실행되지 않도록 수정하는 것이다.

 

[그림 7] 취약점 해결을 위해 입력 값 조건 강화

 

이처럼 프로그램 개발자가 취약점을 수정하기 위해 패치를 배포하더라도 사용자가 패치를 하지 않으면 의미가 없다. 사용자가 프로그램의 취약점을 수정하는 패치를 적용하지 않으면, 즉 최신 업데이트를 하지 않으면 사용자는 취약한 프로그램을 그대로 이용하게 되고 결과적으로 언제든 이를 악용한 공격에 피해를 입을 수 있다. ‘사용 중인 OS와 프로그램의 최신 업데이트 적용하라’는 보안 수칙을 지나치면 안되는 이유가 바로 이것이다.

 

지금까지 악의적으로 프로그램의 취약점을 이용한 공격 방식을 알아보고, 이를 통해 보안 수칙이 그저 늘 하는 ‘잔소리’가 아님을 확인했다. 최근 많은 사용자들에게 피해를 입힌 랜섬웨어도 웹 브라우저 등 다양한 프로그램 취약점을 이용하고 있는 만큼, 최소한 위에서 언급한 보안 수칙은 꼭 지키려는 노력이 필요하다.

첨부파일
비밀번호 수정 및 삭제하려면 비밀번호를 입력하세요.
댓글 수정

비밀번호 :

0 / 400 byte

비밀번호 : 확인 취소


HOME  COMPANY  BOARD  AGREEMNET  PRIVACY  GUIDE

011-17-010436

농협 / (주)소프트정보서비스

015-01-0690-148

국민 / (주)소프트정보서비스

WORLD SHIPPING

PLEASE SELECT THE DESTINATION COUNTRY AND LANGUAGE :

GO
close