1P by GN⁺ | ★ favorite | 댓글 1개
  • 폴란드 NEWAG Impuls EMU 열차가 제3자 정비소 정비 뒤 멈추는 문제를 두고, 연구자 3명이 약 1년간 PLC 코드를 역공학함
  • 제조사는 원인을 정비 과실로 돌리며 자사 정비를 주장했지만, 코드에는 특정 조건에서 가짜 오류로 열차를 잠그는 로직이 들어 있었음
  • 일부 컨트롤러 버전은 GPS 좌표로 제3자 정비소를 구분하려 했고, 문서화되지 않은 운전실 키 조합으로 잠금을 풀 수 있었음
  • 이후 PLC 소프트웨어에서는 키 조합 해제가 사라졌지만 잠금 로직은 남았고, 특정 업데이트 뒤에는 HMI가 저작권 위반 경고까지 표시함
  • 열차의 GSM 텔레메트리 장치는 잠금 조건을 송신했으며, 일부 사례에서는 원격 잠금 가능성도 보였음

NEWAG Impuls EMU PLC 코드 역공학

  • q3k, redford, mrtick은 약 1년 동안 NEWAG Impuls EMU 열차의 PLC 코드를 역공학함
  • 문제의 열차들은 제3자 정비소에서 정비를 받은 뒤 임의의 이유로 잠기는 증상을 보였음
  • 제조사는 제3자 정비소의 정비 과실이 원인이라며, 제3자가 아니라 제조사에서 정비해야 한다고 주장함

코드 안에 들어 있던 잠금 조건

  • PLC 코드에는 열차를 가짜 오류 코드와 함께 잠그는 로직이 포함돼 있었음
    • 특정 날짜 이후 잠금이 발생할 수 있었음
    • 일정 시간 운행하지 않았을 때도 잠금이 걸릴 수 있었음
  • 한 컨트롤러 버전에는 GPS 좌표가 들어 있었고, 이 동작을 제3자 정비소로 한정하는 데 쓰였음

문서화되지 않은 해제 방법과 이후 변경

  • 운전실 조작부에서 특정 키 조합을 누르면 열차 잠금을 해제할 수 있었음
  • 이 해제 방법은 문서화돼 있지 않았음
  • 더 최신 PLC 소프트웨어 버전에서는 키 조합 해제가 삭제됐지만, 잠금 로직은 그대로 남아 있었음

HMI 경고와 GSM 텔레메트리

  • NEWAG의 특정 업데이트 뒤에는 운전실 조작부가 저작권 위반 관련 경고 메시지를 표시함
    • HMI가 잠금이 걸렸어야 할 조건 일부를 감지했는데도 열차가 계속 운행 중일 때 메시지가 나타남
  • 열차에는 GSM 텔레메트리 장치가 있었음
    • 이 장치는 잠금 조건을 송신함
    • 일부 경우에는 원격으로 열차를 잠글 수 있는 것처럼 보였음

댓글과 토론

Hacker News 의견들
  • 이 열차들은 폴란드에서 꽤 많은 지역 철도 회사들이 독점적으로 쓰고 있음. 정비 등급은 P1부터 가장 복잡한 P5까지 5단계인데, 예전에는 대형 업체들만 P3 이상을 맡았지만 몇 년 전부터 European Union Agency For Railways가 시장을 열면서 더 작은 경쟁사들이 훨씬 낮은 가격으로 입찰을 따내기 시작함
    SPS Mieczkowski가 정비한 열차 4대가 시동조차 걸리지 않으면서 시작됐고, 회사는 €50만 벌금을 내야 했으며 열차는 Newag로 되돌아감. 동시에 정비에 들어가지도 않았지만 한 장소에 너무 오래 있었다는 이유만으로 다른 회사의 열차들도 움직이지 않게 됨. 결국 SPS Mieczkowski가 Dragon Sector를 고용해 조사했고, 열차를 비활성화하는 별도 루틴들이 여러 개 발견됨
    이 사건은 폴란드 Central Anti-Corruption Bureau가 조사 중이지만 Newag에 큰 타격이 갈지는 의문임. 폴란드 Office of Rail Transport는 열차 시간표의 작은 실수에도 민원을 쏟아내고 명령을 내리던 기관인데, 이 사건 개입은 손을 뗐고 열차 구매는 입찰 절차가 매우 엄격해 철도 회사들이 움직일 여지도 거의 없음

    • 이건 폴란드 형법 254a조의 사보타주 범죄가 명확해 보임. 입찰 절차는 이 사건에서 중요하지 않고, 유능한 검사가 필요할 뿐임
      https://sip.lex.pl/akty-prawne/dzu-dziennik-ustaw/kodeks-kar...
    • Internal Security Agency도 조사 중이고, Newag가 큰 문제를 피하기는 어려워 보임. 내부적으로도 이 사안을 극히 심각하게 받아들이고 있음
      무슨 일이 있었는지 입증할 증거가 엄청나게 많아서 빠져나갈 가능성은 거의 없음. 그래도 해킹당했다고 주장하며 빠져나가려는 중임. 해커들이 경쟁사가 정비한 열차의 펌웨어를 플래시해서 열차를 벽돌로 만들었다는 식인데, 경쟁 철도 구간의 GPS 좌표가 말 그대로 하드코딩돼 있었음
    • 더 최신형인 Impuls 2는 폴란드 밖에서도 쓰임. 이탈리아 FSE가 11대를 운영 중임
      다만 Newag가 이탈리아 확장을 계속 원했던 걸 생각하면 그 열차들까지 사보타주하지는 않았을 것 같음. 물론 신규 고객까지 태워버려도 괜찮다고 생각했을 수도 있음
  • 댓글 속에 더 긴 글과 추가 세부사항 링크가 묻혀 있음
    폴란드어:
    https://zaufanatrzeciastrona.pl/post/o-trzech-takich-co-zhak...
    https://wiadomosci.onet.pl/kraj/awarie-pociagow-newagu-haker...
    영어:
    https://zaufanatrzeciastrona-pl.translate.goog/post/o-trzech...
    https://wiadomosci-onet-pl.translate.goog/kraj/awarie-pociag...
    배경을 보태면 폴란드는 16개 voivodship으로 나뉘고, 2000년대 초 개혁 이후 거의 각 지역이 자체 지역 철도 회사를 갖고 서로 협력함. 1년 넘게 Newag 열차에 수상한 일이 있다는 건 사실상 다들 알고 있었음. 여러 회사 소유 열차에서 고장이 이어졌고, 이들은 Newag가 아니라 제3자 정비업체를 썼음. 그래서 정비업체가 해커들을 고용했고, 리버스 엔지니어링으로 정확히 무슨 일이 벌어지는지 이해하는 데 시간이 걸림

    • 폴란드 사람이라 województwo가 무슨 뜻인지는 알았지만, 영어로 voivodship이라는 대응어가 있는 줄은 몰랐음. Wikipedia에서 읽어보니 흥미로웠음
      https://en.wikipedia.org/wiki/Voivodeship
  • Microsoft가 예전에 DR-DOS 경쟁을 사실상 망가뜨리는 데 쓴 AARD “crash” 가 떠올랐음
    AARD 코드는 Microsoft Windows 3.1 베타 릴리스에 들어 있던 코드 조각으로, Windows가 MS-DOS나 PC DOS가 아니라 DR-DOS 같은 경쟁 호환품 위에서 실행되는지 판별하고, 그 경우 난해한 오류 메시지를 내도록 되어 있었음. 이 XOR 암호화, 자기수정, 의도적으로 난독화된 기계어 코드는 문서화되지 않은 DOS 구조와 함수들을 여럿 사용했음
    https://en.wikipedia.org/wiki/AARD_code
    https://www.geoffchappell.com/notes/windows/archive/aard/drd...
    https://news.ycombinator.com/item?id=36042213

    • Microsoft라면 그럴 법함. Compaq에 OS/2 Warp가 깔린 PC를 하나라도 팔면 Windows가 깔린 PC는 다시는 팔 수 없게 하겠다고 한 바로 그 회사임
      좋은 걸 오래 누리지 못하게 만드는 건 결국 인간임. OS/2 Warp는 훌륭한 운영체제였음
    • AARD 코드는 Windows 사용을 막지 않는 비치명적 경고였고 실제로 출시되지도 않았음. 최종 릴리스에서는 도달 불가능하게 패치됐는데, 아마 회귀를 피하고 긴 빌드 시간을 줄이려는 바이너리 패치였을 것임. 플로피 디스크 배치 최적화라는 큰 패킹 문제도 있었음
      참고로 DR-DOS는 출시 시점부터 막다른 제품이었음. 사람들과 OEM이 그래픽 운영체제와, 그 그래픽 운영체제의 부트로더처럼 동작하는 DOS라는 두 운영체제를 함께 사지는 않을 게 너무 명확했음. 독립형 텍스트 전용 16비트 DOS 시장이 의미 있는 기간 동안 존재한다는 생각은 완전한 환상이었고, DR-DOS는 판매량 측면에서도 중요하지 않았음. AARD 코드가 실제 Windows 3.x 최종판에 들어갔어도 달라질 건 없었을 것임
    • 이번 경우와는 별로 같지 않음. AARD 충돌은 의도적인 호환성 파괴였고, 이건 계획된 노후화에 더 가까움
      열차를 “너무 오래” 세워두면 비활성화된다니, Microsoft도 플랫폼을 그 정도로 통제하고 싶어 했을 것 같음
    • 기사에 따르면 해당 기능은 활성화되지 않았다는데, 그렇다면 그게 어떻게 DR-DOS 경쟁을 망가뜨리는 데 쓰였다는 건지 의문임
    • 몇 년간 전 세계 운영체제 지배를 확보한 대가로 2억 8천만 달러 합의금이면 꽤 싼 편임
  • 글이 올라온 뒤 Newag 주가가 꽤 떨어졌는데, 이게 Mastodon발 가격 조정의 첫 사례일까?
    https://g.co/kgs/WVku4C

    • 그래도 아직 1개월 기준 +10%, 3개월 기준 +25%임
    • 폴란드 언론도 보도했으니 Mastodon 때문에만 생긴 일은 아님
  • 2022년 11월 21일, 운행 중도 아니던 다른 열차 편성이 작동을 거부하는 꽤 웃긴 상황이 있었음. 컴퓨터는 압축기 고장을 보고했지만, 정비사들이 확인한 결과 압축기에는 아무 문제가 없었음. 그런데도 열차는 팬터그래프를 올리지 않았고, 컴퓨터 코드를 분석하니 고장을 강제로 발생시키는 조건이 나왔음
    날짜가 21일 이상이고, 월이 11월 이상이고, 연도가 2021년 이상이면 압축기 고장을 보고하라는 식이었음

    • 좋게 해석하면 압축기 제조사가 핵심 부품 교체를 보장하려고 만료일을 넣어둔 것일 수도 있음. 하지만 아마 그냥 수상한 장사일 가능성이 큼
    • 진짜 범죄는 표준 날짜/시간 라이브러리와 간단한 > 2021-11-21 비교를 쓰지 않은 것임
    • 이렇게 코딩한 이유는 컴파일된 코드에 특정 날짜가 그대로 나타나지 않게 하려는 것일 수 있음
  • 이 제조사는 핵심 인프라를 마비시켜 폴란드를 말 그대로 인질로 잡은 셈 아닌가? 믿기 힘들 정도로 대담한 범죄이고, 그냥 빠져나갈 수 있을지는 별로 확신이 안 듦

    • 정비소가 아니라 제조사임. 정비소는 입찰을 따냈을 뿐이고, 공급사가 보복하기로 한 것임
  • 세상 참 좁음. HN을 열었더니 여러 번 탔던 열차들에 관한 영화 같은 이야기가 나옴. 실제로 정지된 그 열차들 중 하나를 타고 지나갔을 가능성도 있음
    어쨌든 코드 리뷰가 없었거나, 리뷰어들이 어떤 이유로든 받아들였다는 뜻임. 어느 쪽이 더 무서운지는 잘 모르겠음

    • 제3자가 코드 리뷰를 한다는 뜻인가? 보통 그런 일이 있나?
      이건 열차 제조사가 의도했고, 제조사가 코드 작성을 지시한 게 분명해 보임. 해커가 관리자도 모르게 몰래 넣은 상황은 아닌 듯함. 누가 어떤 코드 리뷰를 한다는 건지 궁금함
      다른 댓글들을 읽어보니 HN 상단 기사가 바뀌었고, 일부 댓글은 정보가 훨씬 적던 기사 기준으로 쓰였던 것 같음. 그래서 댓글들이 헷갈렸던 듯함
    • 그 코드는 아마 제대로 리뷰됐고 꽤 진지한 테스트도 거쳤을 것 같음. 추가 트리거 조건이 붙은 지오펜스가 존재한다는 점에서 짐작 가능함
  • 안타깝게도 Newag 열차는 다른 폴란드 제조사인 Pesa보다 품질이 꽤 나은 편임. 너무 신뢰성이 높아서 인위적인 고장을 만들어야 했던 모양임

  • 누가 이 악성 조건들을 코딩했고, 누가 알고 있었는지 궁금함. 내부고발을 생각한 사람이 아무도 없었을까?
    참고로 회사에 대한 익명 직원 평가 페이지가 있음: https://www.gowork.pl/opinie_czytaj,19587
    유독한 근무 환경으로 보임

    • 소프트웨어 개발자로서 이런 일을 지시받으면, 반드시 서면 지시를 요구해야 함
  • 이 상황이 유럽 철도 서비스 회사 Akiem과의 계약에 어떤 영향을 줄지 흥미로움. Akiem은 프랑스용 서비스와 열차를 위해 Newag와 1억 6,400만 유로 계약을 체결했음
    [1] https://biznes.pap.pl/pl/news/all/info/3509606,newag-inks-eu...