파일 포함과 임의 코드 실행: 최근 워드프레스로 구축된 한 항공권 예매 웹사이트가 해킹을 당해 수십만 명에 달하는 방문자의 개인정보가 유출되는 사건이 발생했습니다. 앞서 '해커는 왜 해킹하는가'라는 글에서 데이터 절도, 스팸 메일 발송, 블랙햇 SEO 기법을 활용한 자사 제품 상위 노출(추천 읽기 – 파마 해크) 등 해킹의 다양한 동기를 살펴본 바 있습니다.
해커가 어떻게 웹사이트를 해킹하는지 아는 것이 곧 예방의 핵심입니다. 그래서 저희는 이전 글에서 워드프레스 사이트에 가해지는 가장 흔한 해킹 공격 유형들을 정리해 소개했습니다.
흔한 해킹 공격이라고 하면 대부분 무차별 대입(Brute Force) 공격을 떠올리실 겁니다. 하지만 파일 포함과 임의 코드 실행 역시 워드프레스 사이트를 겨냥한 대표적인 공격 중 하나입니다. 이번 글에서는 이 두 가지 공격을 좀 더 깊이 들여다보며 자세히 이해해 보겠습니다.
이러한 공격의 작동 원리를 이해하려면 가장 먼저 PHP 파일에 대해 알아야 합니다. 왜냐하면 파일 포함 공격과 임의 코드 실행 공격 모두 PHP 파일을 이용하기 때문입니다.
그렇다면 PHP 파일이란 무엇일까요? 주방 찬장을 떠올려 보세요. 찬장 안에는 설탕, 소금, 양념, 조리도구 등 저마다 용도가 있는 물건들이 들어 있습니다. PHP 파일은 바로 이 찬장과 같으며, 파일 안의 코드들은 해커가 원하는 특정 기능을 수행할 수 있게 해주는 물건들에 해당합니다. 이 때문에 해커는 JPEG나 PDF 같은 다른 파일보다 PHP 파일 업로드를 선호합니다. JPEG와 PDF 파일은 실행 가능한(executable) 파일이 아니어서 해커가 이를 통해 어떤 기능도 실행할 수 없습니다. 단순히 열어볼 수만 있을 뿐, 해킹된 사이트에 변경을 가하는 데는 쓸 수 없습니다.
웹사이트 서버에 PHP 파일 하나만 올려두면 해커는 그 사이트에서 사실상 무엇이든 할 수 있습니다. 이것이 바로 파일 포함 및 임의 코드 실행 공격에 PHP 파일이 사용되는 이유입니다.
파일 포함 공격이란?
이처럼 복잡한 웹사이트 공격은 실제 시나리오를 예로 들어 이해하는 것이 가장 좋습니다. 여러분이 운영기관 홈페이지(college.com)를 운영하고 있다고 가정해 보겠습니다. 최근 학교 행사에서 찍은 사진을 게시할 수 있도록 학생 몇 명에게 사이트 접근 권한을 부여했습니다. 그런데 누군가 이 권한을 남용해 악성 PHP 파일(hack.php)을 사이트에 업로드했습니다. 목표는 대학 웹사이트 장악입니다. 학생이 악성 PHP 파일을 업로드하면 기본적으로 업로드(Upload) 폴더에 저장되는데, 워드프레스의 기본 구조를 아는 사람이라면 누구나 업로드된 파일이 어디로 가는지 알고 있습니다.
이 파일은 해커가 원격으로 파일과 통신할 수 있게 해주는 '문' 역할을 합니다. 주목할 점은 해커가 아직 사이트를 완전히 장악한 것은 아니라는 것입니다. 단지 소통 창구를 확보했을 뿐입니다. 이해를 돕기 위해 비유하자면, A라는 사람이 입국이 허용되지 않는 나라에 가고 싶어해서 대리인 B를 보내는 상황입니다. A는 해커, 그 나라는 대학 웹사이트, B는 hack.php 파일입니다.
대학 웹사이트에 업로드된 PHP 파일 ——> 파일은 웹사이트 서버에 저장됨
B는 몇 가지 훈련받은 일만 할 수 있어 능력이 제한적입니다. 따라서 A는 다음 행동 지시를 내려야 합니다. 마찬가지로 PHP 파일은 통신 창구를 만든 뒤 해커의 추가 명령을 기다립니다.
hack.php가 추가 파일을 사이트에 업로드할 수 있도록 만들어졌다고 가정해 보겠습니다. 해커는 이미 웹사이트 서버에 존재하는 hack.php를 이용해 업로드할 새 파일(control.php)을 만듭니다. 새 파일 control.php는 해커에게 사이트 전체 접근 권한을 부여합니다. 해커는 hack.php가 제공하는 창구를 이용해 control.php를 사이트에 업로드합니다. 이미 웹사이트 서버에 존재하는 파일(hack.php)을 이용해 control.php를 업로드하는 이 과정을 로컬 파일 포함(Local File Inclusion)이라고 합니다.
로컬 파일 포함의 대표적인 사례는 워드프레스 플러그인 Easy Forms for MailChimp(v 6.0.5.5)에서 발견된 취약점입니다. MailChimp 플러그인을 사용하면 사이트 운영자가 워드프레스 사이트에 다양한 형태의 폼을 추가할 수 있습니다. 이 취약점으로 인해 해커는 MailChimp 폼을 통해 PHP 파일을 웹사이트 서버에 업로드할 수 있었습니다. 파일이 서버에 저장되면 해커는 이와 통신하여 서버를 장악하거나 사이트를 여러 방식으로 손상시키는 코드를 실행할 수 있었습니다.
시나리오를 하나 더 살펴보겠습니다. 대학 웹사이트에 방화벽이 설치되어 있어 해커가 control.php를 직접 업로드할 수 없다고 가정합니다. 별도의 파일을 업로드할 수는 없지만 '포함(include)'시킬 수는 있습니다. 즉, 이미 대학 웹사이트 서버에 있는 hack.php 파일 안에 다른 파일을 삽입할 수 있다는 뜻입니다. 만약 해커가 control.php를 직접 업로드했다면 웹사이트 서버는 해당 파일을 읽고 내부 코드를 실행해 해커가 원하는 무엇이든 가능하게 했을 것입니다. 하지만 직접 업로드가 불가능하므로 서버가 control.php를 읽게 만들 다른 방법을 찾아야 합니다. 해커가 만든 경로(path)는 온라인에서 접근 가능해야 하고, 대학 웹사이트 서버가 그 경로를 읽을 수 있어야 합니다. 따라서 해커는 경로를 만들어 온라인에 공개하고, 대학 웹사이트 서버가 이를 읽도록 유도합니다. 서버는 해당 경로에서 가져온 코드를 실행하기 시작하고, 그 코드는 해커에게 사이트 전체 권한을 부여하도록 작성되어 있으므로 해커는 결국 대학 웹사이트를 장악하게 됩니다. 서버가 원격 파일을 읽게 만드는 이 과정을 원격 파일 포함(Remote File Inclusion)이라고 합니다.
TimThumb 취약점 사례는 원격 파일 포함의 유명한 예입니다. TimThumb는 워드프레스 사이트에서 이미지를 손쉽게 편집할 수 있게 해주던 워드프레스 플러그인으로, imgur.com, flickr.com 같은 이미지 공유 사이트에서 가져온 이미지를 누구나 사용할 수 있게 해주었습니다. TimThumb는 imgur를 유효한 사이트(화이트리스트 등록)로 인식했습니다. 해커는 이 기준을 악용해 https://www.imgur.com.badsite.com처럼 유효한 사이트 이름을 포함한 URL로 된 파일을 만듭니다. 해커가 이런 URL을 담은 악성 파일을 업로드하면 플러그인은 파일이 유효한 웹사이트에서 온 것으로 착각합니다. 그리고 악성 파일의 웹사이트 서버 업로드를 허용해 버립니다. 플러그인의 취약점을 이용해 웹사이트 서버 외부의 악성 파일을 포함시키는 이 모든 과정이 원격 파일 포함입니다. 악성 PHP 파일이 웹사이트 서버에 저장된 후에는 해커가 이와 통신해 자신이 원하는 동작을 실행할 수 있습니다.
임의 코드 실행 공격이란?
원격 및 로컬 파일 포함을 알았으니 이제 임의 코드 실행이 무엇인지 알아보겠습니다. 파일 포함과 임의 코드 실행은 서로 밀접하게 연관되어 있습니다. 파일 포함 공격에서 해커의 궁극적인 목표는 웹사이트에서 임의의 코드를 실행하는 것입니다. 앞선 로컬 파일 포함 예시로 돌아가 보겠습니다. 해커가 대학 웹사이트에 hack.php를 업로드한 뒤, hack.php를 이용해 control.php를 업로드했습니다. '임의 코드 실행'이란 해커가 해킹한 웹사이트에서 자신이 원하는 어떤 명령이든 실행할 수 있는 능력을 뜻합니다. PHP 파일(hack.php와 control.php)이 웹사이트 서버에 올라간 순간 해커는 원하는 코드를 무엇이든 실행할 수 있습니다. 업로드한 파일에서 임의의 코드를 실행하는 이 과정을 임의 코드 실행(Arbitrary Code Execution)이라고 합니다.
해킹은 복잡한 주제입니다. 이 글에서는 최대한 쉽게 풀어 설명하려고 노력했지만, 이해되지 않는 부분이 있다면 언제든지 문의해 주시기 바랍니다. 다음 글에서는 워드프레스 사이트에 흔한 또 다른 해킹 공격인 크로스 사이트 스크립팅(XSS)을 다룹니다. 놓치지 마세요.