CrowdStrike Outage

RINM·2024년 8월 2일

log

목록 보기
2/2

한창 개발로 정신이 없을 때, 흥미로운 (누군가에겐 슬픈) 소식이 들려왔다. 가볍게 지나친 뉴스 헤드라인 중 하나였는데, "크라우드스트라이크" 사태로 항공사들의 전산이 마비되었고, 직원들이 수기로 항공권을 발급하고 있다는 내용이었다. 정신 없어서 놓쳤지만 사고가 일어난 직후부터 단톡방에서 관련 기사와 자료를 공유하고 있었다. 지금 이 글을 쓰는 시점도 많이 늦은 감이 있지만, 더 잊혀지기 전에 크라우드스트라이크 사건, CrowdStrike Outage/Incident로 불리는 이 일을 정리해보고자 한다.

CrowdStrike

CrowdStrike는 기업명이다. 정확히는 여러 IT 보안 제품을 판매하는 미국의 기업이다. 주로 다른 기업을 대상으로 컴퓨터 단말을 보호할 수 있는 여러 솔루션을 판매한다. 이번 사건이 항공사 관련으로 크게 화제가 된 것도, 전세계 수많은 항공사들이 크라우드스트라이크의 제품을 사용하고 있기 때문이다.
이번에 문제가 된 제품은 Falcon Sensor라는 것인데, 취약점 스캐너로서 컴퓨터 단말의 운영체제 커널 단에 설치되어 단말내에 존재할 위협을 탐지하고 예방하는 역할을 한다. 대부분의 밴더사들이 그렇듯 주기적인 패치를 통해서 새로운 위협을 탐지할 수 있도록 업데이트한다. 사건은 바로 이 업데이트 과정에서 발생했다.

BSOD (Blue Screen of Death)

2024년 7월 18일, 크라우드스트라이크는 Falcon Sensor를 위한 새로운 패치를 배포했다. Mac이나 Linux 계열의 운영체제는 괜찮았다. 새로운 패치는 Windows 운영체제를 사용하는 모든 컴퓨터를 멈췄다. 당연히 주로 기업에서 Falcon Sensor를 사용하기 때문에 일반 개인 windows는 문제가 없었다. 그런데 피해가 확산된 것은 Microsoft Azure의 수많은 windows 가상머신들 또한 한순간에 멈췄기 때문이다. 클라우드를 사용하는 기업이 한둘인가, 게다가 거대 기업들도 너도나도 클라우드 서비스로 네트워크를 구축하는 시대니 문제는 일파만파 커졌다. 그 대표적인 예시가 항공사들이었고.
어떤 기업에서는 사내 모든 컴퓨터가 먹통이 되면서 "BSOD Day"라고 기뻐하는 직원들의 SNS 게시글이 올라오기도 했다.

BSOD는 Blue Screen of Death의 줄임말로 윈도우 시스템에 결함이 생겨 시스템이 중단되면 나타나는 Blue Screen에서 유래한 말이다. 요새는 조금 줄었지만, 윈도우 컴퓨터를 사용한 적이 있는 사람들은 한 번쯤 마주했을 그 절망의 순간 말이다. 단순한 crash면 대체로 컴퓨터의 전원을 껐다 켜면 해결되지만 안타깝게도 이번 사건은 그리 단순한 오류가 아니었기 때문에 문제를 바로 잡는데 시간이 걸리게 되었다.
크라우드스트라이크는 급하게 패치 버전을 revert 했지만 이미 그 전에 부팅한 컴퓨터들은 모두 BSOD와 마주했고 안전모드로 진입해서 문제가 되는 패치 파일을 삭제한 다음에야 다시 부팅을 할 수 있었다. 혹은 이더넷에 연결된 상태로 부팅해서 revert된 패치 파일을 다시 다운로드하게 할 수도 있었다.

Cause

간단하게 말하면 크라우드스트라이크의 업데이트 패치가 윈도우 운영체제 커널을 잘못 건들이면서 생겼다. 패치에 포함되었던 configuration 파일이 잘못되어 out-of-bounds memory read를 일으켰고, 결국 invalid page fault가 나면서 bootloop에 빠지게 되었다.

Kernel Space

크라우드스트라이크의 패치가 어떻게 커널을 건들이게 되었는지 쉽게 설명한 글이 있어서 가져와봤다.

[Medium] The July 19th CrowdStrike Windows Glitch Explained

컴퓨터를 집에 비유해서, 우리가 평소 사용하는 공간은 컴퓨터의 User space, 집의 뼈대와 전기 설비, 냉난방 장치 등의 설비는 Kernel Space로 비유했다.

이제 집에 스마트 온도계를 하나 단다고 생각해보자. 이 온도계는 집안 온도를 측정해서 냉난방 설비를 조작해 적정 온도를 유지한다. 집 벽 어딘가에 설치해서 평소에 터치 패널로 조작할 수 있게 하면서도 벽 안에 있는 냉난방 설비와 연결해주어야한다.

이 스마트 온도계는 원래 집 설비에 딸려있던 것이 아니다. 심지어 제조사가 집을 만든 건축업자와 관련이 없을 수도 있다. 온도계 개발자가 집의 설비를 고려해서 맞춤으로 작동할 수 있도록 개발했기 때문에, 냉난방 설비를 조작하는 부분은 업데이트를 하기 쉽지 않다. 매번 벽을 부수고 다시 온도계를 달 수는 없으니까.
그런데 집 안에 달린 터치패널은 사용자와 접하는 부분이기 때문에 다양한 업데이트가 들어간다. 단순히 현재 내부 기온을 표시하다가도, 권장 온도를 알려주거나, 내부가 너무 더우면 땀흘리는 이모지를 띄운다거나 다양한 일을 할 수 있다.
이처럼, 이 온도계는 User space와 Kernel space에 모두 접해있기 때문에 특정 부분은 업데이트가 힘들고 다른 부분은 업데이트가 필요하다.
그래서 이 온도계는 둘 파트로 나누어서 업데이트를 관리한다. 커널 부분은 거의 건들이지 않고, 이 커널 부분에서 온도를 조작할 수 있도록 판단하고 명령하는 유저 부분은 사용자 편의에 따라 다양한 기능이 업데이트된다.

크라우드스트라이크의 Falcon Censor가 바로 이 온도계와 같이 커널 부분과 유저 부분이 나누어 동작한다.

이제 이 온도계를 스마트폰 앱으로 조작할 수 있게 하는 업데이트가 이루어졌다고 생각해보자. 유저 부분인 온도계 패널에 스마트폰과 연동할 수 있는 기능이 추가되었다. 개발자의 의도대로라면 이제 스마트폰에서 집안 온도를 올리고 싶을 때 앱에 들어가 온도 올리기 버튼을 누르면, 냉난방 설비가 그 명령을 받아서 히터를 틀어야한다.

그런데 이 과정에서 오류가 생길 위험이 높다. 스마트폰에서 온 명령이 기존 패널 명령과 다르게 커널 부분에서 해석이 되면, 온도를 올리는 명령에도 오히려 에어컨이 작동할 수 있다. 즉, 두 부분이 나누어져있기 때문에 업데이트가 제대로 적용되지 못하고 의도치 않은 결과를 낳을 수 있다.

이번 사건이 바로 이렇게 발생했다. Falcon Censor는 유저 스페이스에서 업데이트가 이루어지면 이것을 커널이 반영하게 한다. 이 과정에서 무언가 잘못되었고 윈도우즈 시스템 파일을 건들이는 바람에 BSOD를 마주하게 된 것이다.

N-2/N-1 Policy

자료 조사를 위해서 위키피디아를 둘러보던 중, 인용된 흥미로운 기사를 발견했다. 이번 사건에 대한 보안 담당자 입장의 기사인데 생각지도 못한 문제점을 지적한다.

[The Register] Administrators have update lessons to learn from the CrowdStrike outage

부제가 무려, "How could this happen to us? We were supposed to be two versions behind?"이다. 번역하면 "어쩌다 우리가 이렇게 됐지? 두 버전 뒤에 있어야 했잖아?"이다.

N-2 혹은 N-1 정책은 서비스나 솔루션의 support lifecycle과 관련된 것으로, 현재 버전보다 2버전 혹은 1버전 아래 버전까지 지원을 해준다는 것이다.

예민한 곳들은 아무래도 새 버전이 안정적인지 확인을 하고 업데이트를 해야하기 때문에 이러한 정책이 존재하고, 보안 담당자 혹은 인프라 관리자들은 이에 맞게 업데이트를 미루고는 한다.

크라우드스트라이크도 N-2 업데이트를 권장하고 있었다. 즉, 문제가 되는 업데이트의 이전 버전이었으므로 이 권장사항을 따르는 대부분의 시스템에는 영향이 없어야 했다. 그런데 왜 전세계 800만대의 컴퓨터가 먹통이 되었을까?

보안 문제에서 최신성을 유지하는 것은 매우 중요하다. zero-day attack으로 뚫리는 곳들을 생각해보면 하루라도 빨리 보안 패치를 적용해야한다. 그러니 아무리 N-2 policy여도 새로운 취약점 시그니처를 빠르게 업데이트해야 안전하다. 이런 생각이 배경에 있었기 때문인지 Falcon censor는 담당자들이 세운 자동 업데이트 방지 규칙에도 불구하고 패치가 적용되었다. 이번 패치가 Falcon 시스템 자체에 대한 업데이트가 아니라, 시그니처 파일을 위주로한 컨텐츠 업데이트였기 때문이다.

결국 보안 담당자들은 늘 그렇듯 딜레마에 도달했다. BSOD와 malware 중의 양자택일이었던 것이다.

Impact

사건 당일 크라우드스트라이크의 발표에 따르면 자사 2만4천 곳의 고객들이 영향을 받았다. 이 수치는 포츈 500대 기업의 60%에 육박한다. 우리가 흔히 아는 기업들 대부분이 영향을 받았다고 해도 과언이 아닌 것이다.
7월 20일에 Microsoft가 발표한 바에 의하면 전세계 850만대의 기기가 영향을 받았다. 크라우드스트라이크가 기업용 솔루션인 것을 감안하면 정말 많은 양의 windows system이 먹통이 된 것이다.
피해는 열흘이 흐른 7월 29일에야 모두 복구되었다.

[BBC] CrowdStrike sued by shareholders over global outage

이렇게 큰 피해를 입힌 크라우드스트라이크는 고소를 당했다. 제대로된 테스팅 없이 배포한 것이 가장 큰 원인이며 그 책임이 모두 크라우드스트라이크에 있다는 지적이 있기 때문이다.

[BBC] CrowdStrike backlash over $10 apology voucher

사고 직후 크라우트스트라이크는 더 철처하게 테스트하고 확인하겠다며 사과했다. 그러나 여론은 좋지 못했다. 보안 전문가의 말을 빌리자면, 그 어떤 가드레일도 없이 한 꺼번에 모든 고객에게 선택권 없는 업데이트를 적용한 것이기 때문에 회사의 책임을 피할 수 없을 것으로 보인다.

회사 내부의 대처도 엉망이었나 보다. 아래 BBC 기사에 따르면 이번 사태로 추가 근무를 하게된 직원/파트너들은 고작 10달러의 우버이츠 상품권을 보상으로 받았다. 그리고 그마저도 우버이츠에서 사기로 분류하면서 제대로 쓰지도 못했고.

참고 자료

[데일리시큐] 크라우드스트라이크 업데이트로 인한 글로벌 BSOD 대란 발생…윈도우 10 사용 기업 비상

[Wikipedia] 2024 CrowdStrike incident

0개의 댓글