이건 늘 터질 수밖에 없던 악몽이었음. 패키지 수가 너무 많고 그만큼 공급망 공격 표면이 거대해진 게 언젠가 모두에게 터질 문제였음 “소프트웨어 설치를 일주일 기다리라”는 방식은 통하지 않음. 불과 몇 달 전에도 대규모 취약점이 웹을 강타했는데, 한 달 넘게 잠복했다가 실행된 시간차 공격이었음 다른 선택지로, 보안에 YOLO식으로 접근하지 않는 FreeBSD 같은 운영체제로 옮길 수 있음 보안 전문가들조차 이제 우리 세계가 엄청나게 취약한 균형 위에 있다는 점을 받아들여야 함. 사람들이 이걸 정말 과소평가한다고 봄 npm, PyPI, Cargo 같은 의존성 관리자에 대한 공급망 공격에는 이미 괜찮은 해결책이 있음. 패키지 버전이 며칠 이상 지난 것만 설치하도록 설정하는 것임 지속적 통합과 컨테이너화된 빌드를 비교적 최근에 도입한 사람들은, 매 빌드마다 여러 패키지에서 latest를 끌어오고 있지 않은지 시스템을 확인해보는 게 좋음 적극적으로 해로운 의견 글임. 논리를 이해하기가 어려움 언젠가는 누군가 운영체제부터 애플리케이션까지 전체 스택을 증명 운반 코드 업그레이드로 다시 만들 것임 이건 소프트웨어에만 적용되는 게 아니라, 사실 거의 모든 것에 적용됨 copyfail이 무엇이고 NPM 패키지와 어떻게 연결되는지 이해하는 데 도움을 받고 싶음Hacker News 의견들
하지만 너무 편리했음. 경고하거나 피해를 줄이려는 사람들은 다른 방식으로 해본 경험이 없는 사람들에게 묵살됐고, "import antigravity"는 포기하기엔 너무 쉬웠음
이제 “대가를 치르는” 단계에 들어선 듯함
컴파일러, 커널 등을 포함해 거의 모든 것을 소스에서 빌드했고, 빌드 서버/인프라는 인터넷에 전혀 접근할 수 없었으며 변경을 들여오는 절차도 있었음. 관련 CVE는 공개될 때마다 검토해서 우리에게 해당하는지, 어떻게 완화하거나 처리할지 판단했음
이후 옮긴 회사에서는 빌드가 인터넷에 접근했고, 새 버전이 나오자마자 업그레이드했음. 최신 버그 수정을 받는다는 이유로 사람들이 이를 좋은 관행으로 여겼고, CVE 검토는 보안팀이 맡았음
그다음 스타트업은 여러 관행이 섞여 있었음. 아주 좋은 부분도 있었지만 CVE 부채도 컸음. 예를 들어 서버에 보안 부팅과 암호화 디스크를 적용했고, 구성요소 간 통신 보안도 꽤 잘 파악하고 있었음
모두가 자신들이 옳게 하고 있다고 생각함. “자주 업그레이드하는” 사람에게 새 문제를 도입할 위험이 있다는 점을 설득하기가 거의 불가능함. 업계에는 더 나은 관행 묶음이 필요하고, 개인적으로 첫 번째 회사의 의존성 관리 방식이 더 낫다고 봄. 전반적으로 보안 관행이 잘 자리 잡았고 제품도 정말 안전했음
유용한 소프트웨어가 모두 퍼징 테스트, 속성 테스트, 형식 검증을 거친 상태가 되어, 취약점을 찾는 모두가 처음부터 다시 시작해야 하는 상황이 되는 것임
물론 그 사이 각국이 남은 수단을 최악의 적에게 던져대는 공백기를 우리가 버틴다는 전제가 필요함. 아니면 결국 동물 뼈다귀로 서로 때리면 될지도 모름
운영체제 수준에서는 실행된 프로그램이 셸이나 실행한 곳에서 권한 토큰을 전달받고, 모든 시스템 호출이 첫 번째 인자로 권한을 받아야 함. 그래서 "open path /foo"는 open(cap, "/foo")가 됨. 이 권한은 가짜 파일시스템, 실제 파일시스템의 한 분기, 네트워크 파일시스템 등 무엇이든 될 수 있고, 프로그램은 자신이 어떤 샌드박스 안에 사는지 알 필요가 없음
라이브러리/언어 수준에서도 npm 모듈 같은 서드파티 라이브러리를 가져올 때 import 시점이나 호출 위치마다 권한을 넘겨야 함. 그 라이브러리가 내 프로그램 주소 공간의 모든 바이트에 읽기/쓰기 접근을 가져서는 안 되고, 내 컴퓨터에서 나인 것처럼 무엇이든 할 수 있어서도 안 됨. 핵심 질문은 “이 코드의 폭발 반경이 어디까지인가?”임. 사용하는 라이브러리가 악성이거나 취약할 때, 피해 규모에 대해 합리적인 기본값이 필요함. lib::add(1, 2) 호출이 내 컴퓨터 전체의 지속적 침해로 이어져서는 안 됨
SeL4는 빠르고 효율적인 운영체제 수준 권한을 오래전부터 제공했고 잘 작동함. 많은 경우 Linux보다 빠르며, 투명한 샌드박싱, 사용자 공간 드라이버, 프로세스 간 통신, 보안 개선 등에 매우 유용함. Linux를 SeL4 위의 프로세스로 실행할 수도 있음. Linux 데스크톱의 모든 기능을 가지면서 SeL4처럼 동작하는 운영체제를 원함
아쉽게도 원하는 형태의 언어 수준 권한을 가진 프로그래밍 언어는 없는 것 같음. Rust가 꽤 가깝지만, 서드파티 crate가 어떤 unsafe 코드도 호출하지 못하게 제한할 방법이 필요함. 신뢰하지 않는 의존성이 부르는 unsafe도 포함됨. Rust의 오래된 건전성 버그도 고쳐야 하고, 권한 기반 표준 라이브러리도 필요함. 전역 open() / listen() 같은 것은 없어져야 하고, openat()과 운영체제의 다른 부분에 대응하는 동등한 형태만 있어야 함
LLM이 계속 좋아진다면, 몇 년 안에 아무도 먼저 만들지 않으면 LLM에게 이걸 전부 만들게 할 생각임. 현대 데스크톱 운영체제의 보안은 농담 수준임
코드에도 위생 문화가 필요하고, 이는 대부분의 문화권이 음식에 대해 발전시킨 규범과 별로 다르지 않음. 조잡한 휴리스틱의 조합이지만 “으엑”이라는 감각이 수십억 명을 살리고 있음
지금은 의존성 노출을 그 어느 때보다 줄이고 있고, 특히 몇백 줄이면 구현 가능한 것들은 더 그렇음. 이건 그야말로 패러다임 전환임
모두가 일주일 기다리기 시작하면 공격자는 2주를 기다릴 것임. 사이버 범죄자는 즉시 악용할 필요가 없고, 결국 악용하기만 하면 됨. 오타스쿼팅 같은 많은 취약점 유형도 이 방식으로는 달라지지 않음
이 취약점들에 대한 패치가 아직 없을 가능성이 높고, 있다 해도 곧 더 무서운 취약점이 발견될 가능성이 크기 때문임
하지만 지연이 전혀 없으면 아직 아무도 보지 못한 익스플로잇에 당할 수 있음
더구나 이런 침해의 발견은 실제로 악용됐는지 여부에 전혀 의존하지 않았음. 그래서 “모두가 일주일 기다리면 공격자는 2주 기다릴 것”이라는 말이 이해되지 않음
보안 수정이 조율 없이 FreeBSD 커널에 그냥 던져지지 않음. FreeBSD 보안팀을 거치며, 패치가 src 트리에 들어간 뒤 몇 분 안에 FreeBSD Update와 15.0-RELEASE용 pkgbase를 통해 바이너리 업데이트가 배포됨
대략 Slack에 “패치를 푸시했다”는 메시지가 나가는 데 몇 초, 패치 업로드에 10~30초, 미러 동기화에 최대 1분 정도 걸림
공정하게 말하면 내 보고는 핵심 구성요소가 아닌 것에 관한 것이었고 악용도 쉽지 않았지만, Debian, OpenBSD, SUSE, Gentoo는 모두 일주일 안에 패치했음 https://www.maxchernoff.ca/p/luatex-vulnerabilities#timeline
그렇다고 단일한 사소한 보고 처리만으로 전체 운영체제를 평가하자는 뜻은 아님. 내가 본 다른 모든 점은 FreeBSD가 보안 보고를 꽤 진지하게 다룬다는 쪽에 가깝기 때문임. 다만 같은 논리를 Linux 커널 버그에도 적용할 수 있음. 그런 식으로 패치가 잘못 관리되는 일은 Linux에서도 꽤 드묾
보안보다 사용성을 선호하는 편임. 유명한 예가 여기 있음: https://vez.mrsk.me/freebsd-defaults
프로젝트에 기여하는 일은 고맙게 생각하지만, 이런 나쁜 기본값이 있는 동안에는 양심상 사람들에게 옮기라고 권할 수 없음
FreeBSD와 보안을 원한다면 Shawn Webb의 HardenedBSD를 쓰는 편이 맞음
IT 세계만이 아니라, 전체 세계가 수많은 매우 취약한 균형 위에 세워져 있음. 보안 익스플로잇은 늘 존재할 것임. 소프트웨어뿐 아니라 현실에서도 마찬가지임. 누군가는 보안 콘퍼런스에 몰래 들어가기도 했고, 그것도 그냥 유튜버였음. 물론 초고보안 행사는 아니었지만 떠오른 예시가 그거임. 기본적으로 대부분의 경우 보안을 우회하기는 정말 쉬움
말하고 싶은 건, 근본적으로 우리 세계는 적어도 대부분의 사람이 악용하지 않기 때문에 작동한다는 것임. 인간 사회는 늘 그렇게 작동해왔고, 앞으로도 그럴 가능성이 큼
Max Fosh라는 유튜버가 International Security Expo에 연달아 들어갔던 것으로 알고 있음. 영국에서는 https://www.youtube.com/watch?v=qM3imMiERdU, 미국에서는 https://www.youtube.com/watch?v=NmgLwxK8TvA에서 가명으로 각각 “Rob Banks”와 “Nick Everything”을 썼음
보안 문화를 공부해본 적이 있는데, 대부분은 한쪽에 보안, 다른 한쪽에 편의성/접근성이 있는 슬라이딩 스케일로 귀결됨. 더 안전할수록 덜 접근 가능하고, 그 반대도 마찬가지임
최근의 큰 공격들은 모두 하루 안에 발견되어 되돌려졌으므로, 이렇게 했다면 안전하게 피할 수 있었음. 이 동작은 기본값이어야 함. 스스로 선택한 베타 테스터와 보안 스캐너 회사들이 최신 패키지 버전을 하루쯤 먼저 써보게 하면 됨. 방법은 여기 있음: https://cooldowns.dev/
산출물 관리자임. 승인한 것만 가져오게 해줌. 필요할 때는 빠르게 업데이트하고, 필요할 때는 일관되게 검증된 안정 버전을 쓸 수 있음. 약간의 설정 재정의가 필요하지만 쉬운 작업임
비슷한 목적의 엉성한 도구를 직접 만들어 쓴 적이 있는데, 이건 좋은 프로젝트임
물론 기업 밖에서는 자연스럽게 잘 안 통함
일단 발견되면 바로 익스플로잇 폭발이 일어나고, 지연 업데이트는 흥분한 공격자들에게 더 많은 시간을 줌
또 다른 모델은 소스 파일만 배포하는 Perl의 CPAN임
우리는 외부 의존성을 모두 넣은 기본 컨테이너를 만들어두고, 업데이트할 때가 됐다고 판단할 때만 명시적으로 갱신함
그래서 최첨단보다 조금 뒤처질 수는 있지만, 무작위 공급망 취약점이 즉시 전 세계로 배포되는 위험은 훨씬 덜 떠안게 됨
copyfail과 dirtyfrag 취약점이 실제로 얼마나 오래됐는지 확인하는 데는 45초면 충분함. 글을 읽는 시간보다 길긴 함. Dirtyfrag는 2017년까지 거슬러 올라가는 시스템에도 관련될 수 있음
영향을 받는 건 “새” 소프트웨어가 아님. 그리고 실제 오래된 소프트웨어는 문제를 찾을 시간이 훨씬 많았기 때문에 상태가 더 나쁨
신뢰할 수 있는 코드를 실행하는 유일한 방법은 증명과 코드의 공동 설계 및 공동 구축임
어디서 읽었는지는 기억나지 않지만 결국 필요와 욕구의 차이로 귀결됨
새 차를 살지 중고차를 살지, 고급 청소기를 살지 기본형을 살지 결정할 때 이 규칙을 써왔음. 반짝이는 새 기기, 기술 스택에 새 무언가를 들이는 일, 새 기술 스택을 고르는 일에도 마찬가지임
정리해보니 copyfail은 악성 npm 패키지가 Linux 서버에서 루트 권한을 얻을 수 있게 하는 커널 버그인 것 같음
그래서 아직 패치되지 않은 서버가 있는 지금이 공격자들이 NPM 패키지를 노리기에 완벽한 시점이라는 뜻임
조언이 단순히 “커널을 업데이트하라”가 아닌 이유는 관련된 새 문제가 아직 계속 발견되고 있기 때문인가?
인기 NPM 패키지가 침해되어 copy.fail 익스플로잇을 포함한다면, 많은 시스템이 루트 권한 상승에 취약해질 것임

4 days ago
12

!["아아 팔아 갖고는"…치킨·볶음밥까지 내놓은 커피전문점 '속사정' [트렌드+]](https://img.hankyung.com/photo/202604/01.43949627.1.jpg)






English (US) ·