이 엔지니어를 위한 이야기 공장 AI 기술에 인문학의 온기를

1,200곳을 두드린 AI 에이전트, 지시문은 100자 이내

1,200곳을 두드린 AI 에이전트, 지시문은 100자 이내

로이터가 10월 19일, 한 사람이 AI 에이전트를 부려 100곳이 넘는 기업 웹사이트에 침입했다고 보도했습니다. 보안기업 NorForge의 수석 위협 연구원인 스노레 파게를란(Snorre Fagerland)이 추적한 내용인데요. 9월 25일부터 미국과 캐나다, 호주, 일본의 사이트 1,200여 곳을 두드렸고 그중 100곳 넘게 들어갔습니다. 쓴 돈은 토큰 값으로 약 5,000달러, 성공한 침입 한 건당 50달러 꼴입니다.

먼저 숫자부터 정리하고 가죠. 5,000달러도 50달러도 파게를란의 거친 추정입니다. 공격자의 실제 사용량 데이터를 쥐고 계산한 것이 아니고요. 로이터도 데이터가 실제로 얼마나 빠져나갔는지는 확인하지 못했습니다.

그런데 제가 이 사건에서 가장 오래 들여다본 숫자는 5,000달러가 아니라 다른 두 개입니다.

하나는 성공률입니다. 1,200곳을 두드려 100곳 남짓 들어갔으니 대략 열에 하나, 나머지 아홉은 실패했어요. 다른 하나는 공격자가 에이전트에게 건넨 지시문의 길이인데, 100자가 채 안 되는 중국어였습니다. 내용도 평범합니다. 쇼핑몰에서 코드를 실행할 경로를 찾고, 파일을 올릴 수 있는 웹셸을 심어라. 그게 전부였습니다.

1,200곳을 기계로 긁는 일 자체는 예전에도 됐습니다. 네트워크 점검 좀 해 보신 분들은 아실 텐데요. 병목은 스캔이 아니라 그다음이었죠. 긁어 온 결과를 보고 "이 응답은 좀 이상한데, 다른 걸로 바꿔서 다시 찔러 볼까"를 정하는 건 사람이었습니다. 열에 아홉이 헛수고라면 그 헛수고를 감당하는 것도 사람의 시간이었고요. 그래서 공격자도 표적을 골랐습니다.

"우리는 공들여 뚫을 만큼 중요한 회사가 아니다." 보안 회의에서 한 번쯤 들어 보셨을 겁니다. 농담처럼 주고받지만 실은 이게 전략이었어요. 상대편 인건비에 기대는 전략이요.

이번 건에서 그 인건비가 시도 한 번에 5달러 안팎으로 바뀌었습니다.

쓰인 도구는 Cairn이라는 오픈소스 에이전트 플랫폼입니다. 원래는 범용 문제 해결 엔진을 표방하는 도구이고, 자율 침투 테스트가 그 엔진이 처음 검증된 영역이었어요. 쓰는 조건도 허가받은 환경으로 못 박아 뒀고, 만든 쪽도 해를 끼칠 목적이 아니었다고 밝혔죠. 구조가 흥미롭습니다.

여러 AI 에이전트를 묶는다고 하면 보통 매니저 에이전트가 일을 나눠 주고 보고를 받는 그림을 떠올리게 됩니다. Cairn은 그렇게 돌지 않아요. 워커들은 서로 말을 걸지 않습니다. 대신 공유 그래프 하나를 가운데 놓고 거기에 확인된 사실(Fact)과 아직 해 보지 않은 탐색 방향(Intent)을 올려 둡니다. 사람이 중간에 끼워 넣고 싶은 힌트(Hint)도 같은 자리에 붙고요. 워커는 그 판을 통째로 읽고, 지금 상태를 파악하고, 다음에 무엇을 해 볼지 정해서 실행한 다음, 결과를 새 사실로 적어 넣고 내려갑니다.

Cairn은 등산로에 쌓아 올린 돌탑을 가리키는 말입니다. 앞서 간 사람이 돌 하나를 올려 두면 만난 적도 없는 뒷사람이 그걸 보고 길을 찾죠. 서로 말하지 않고 흔적만 남겨 협업하는 이런 방식을 스티그머지(stigmergy)라고 부릅니다. 비유가 아니라 Cairn 문서가 자기 구조를 그렇게 설명하고 있어요.

페로몬 자취를 따라 줄지어 이동하는 개미들
페로몬 자취를 따라 줄지어 이동하는 개미들

스티그머지는 1959년 프랑스 생물학자 피에르폴 그라세가 흰개미의 집짓기를 설명하려고 만든 말입니다. 먼저 해 놓은 일이 다음 일꾼을 부른다는 뜻이죠.

출처: Pexels, oandremoura

이 구조에서는 워커 하나가 실패해도 잃는 것이 없습니다. "여기는 막혔다"는 사실 한 줄이 판에 남고, 다음 워커가 그 줄을 읽고 다른 길로 갑니다. 열에 아홉이 실패해도 괜찮은 이유가 여기 있어요. 실패가 비용이 아니라 재료로 쌓이거든요.

에이전트가 남긴 기록을 따라가 보면 실제로 뚫린 경로가 이렇습니다. 어느 대형 소매업체에서는 쿠키 값 하나로 백엔드 서버가 갈리는 설정을 찾아냈습니다. 다른 곳에서는 메모리 캐시에 올라가 있는 세션 저장소에 글을 쓸 수 있다는 걸 알아낸 뒤, 거기 넣어 둔 PHP 객체가 그대로 되살아난다는 점, 그 되살리는 코드가 오래된 Zend Framework라는 점까지 차례로 이어 붙였습니다. 셋을 하나로 꿰어야 비로소 코드가 돌아가는데요. 취약점 하나하나는 스캐너도 찾아냅니다. 그런데 셋을 이어 붙이는 건 사람의 일이었죠.

이번에 자동화된 것은 공격 도구가 아니라 공격자의 판단입니다. 50달러는 도구 사용료가 아니라 그 판단을 대신한 값이고요.

로이터가 이름을 확인한 곳은 Deere와 SharkNinja, Cummins입니다. 그런데 눈여겨볼 것은 회사 이름이 아니라 뚫린 자리예요. SharkNinja가 당한 곳은 본 서비스가 아니라 제품 지원 정보만 올려 둔 독립 사이트였고, Cummins는 외주 벤더가 운영하던 사이트를 두고 조사 중이라고 밝혔습니다. 자산 목록에서 한참 뒤쪽에 밀려 있었을 법한 자리들이죠.

그래서 오늘 셀 수 있는 것이 두 가지 있습니다. 하나는 우리 도메인으로 뜨는 사이트 가운데 대행사나 협력사가 운영하는 것이 몇 개인지입니다. 보통은 아무도 전체 숫자를 모릅니다. 다른 하나는 방치된 파일 업로드 폼이에요. 쓰지 않는 디렉터리에 남아 있는 업로드 폼이 이번 에이전트들이 노린 발판이었습니다.

여기서부터는 제 가정입니다. 예측은 아니고요. 시도 한 번에 5달러라면 공격자 입장에서는 표적을 고르는 일 자체가 손해입니다. 어디를 칠지 고민하는 시간이 그냥 다 찔러 보는 비용보다 비싸지니까요. 지금까지 취약점 관리의 우선순위는 "이 자산이 얼마나 중요한가"로 매겨 왔는데, 그 기준은 공격자도 중요한 것부터 노린다는 가정 위에 서 있었습니다. 상대가 전수조사로 돌아서면 우선순위는 방어하는 쪽에만 남습니다.

마지막으로 이 작전이 어떻게 들통났는지를 보면 기분이 묘해집니다. 파게를란이 공격을 실시간으로 들여다볼 수 있었던 건, 공격자가 띄워 둔 Cairn 제어판이 인터넷에 그냥 열려 있었기 때문입니다. 10월 2일부터 그런 패널을 스무 개 넘게 찾았다고 해요. 패널에는 어디를 노렸는지, 무엇을 찾아냈는지, 훔친 자격증명과 키까지 다 떠 있었습니다. NorForge가 그 안의 비밀값을 긁어 검사해 보니 11%는 유효한 것으로 확인됐고요.

더 뼈아픈 건 같은 식으로 열려 있던 패널 가운데 합법적인 침투 테스트 업체의 것으로 보이는 것도 있었다는 점입니다. 실제 고객사 테스트 내용이 그대로 올라가 있었습니다.

Cairn 제어판은 기본 설정이 8000번 포트입니다. 공격자도 보안 업체도 똑같이 흘린 걸 보면, 로컬에서 쓰려고 만든 물건을 클라우드에 올리는 순간 벌어지는 일에는 선악이 없나 봅니다. 우리 쪽은 어떤가 싶어, 사내에 띄워 둔 에이전트 콘솔부터 한 번 열어 보게 되네요.


커버 이미지: 산길을 따라 늘어선 돌탑 — Unsplash, Luc Santeramo

#보안 #AI에이전트 #멀티에이전트 #취약점관리 #자동화공격