[Chuyện Khám nghiệm tử thi] Vụ án AWS của Tập đoàn Toàn Đập Đá bị chơi bằng một đống instance c6i.4xlarge và SES service

Một phiên bản của bài này đã được đăng trên Tạp chí Thợ Code.

Vào khoảng gần 3g sáng của ngày cuối tuần, như thường lệ, cậu Phạm N.E. vừa uể oải dụi mắt lắc lắc cái cần cổ nghe khớp kêu răng rắc vừa bấm merge PR như một thói quen rồi chuẩn bị say giấc nồng để khởi đầu một ngày cuối tuần tươi mới vào tầm chính ngọ.

Theo một nguồn tin địa phương thì Phạm N.E. vốn là một chuyên gia công nghệ cao cao cao cấp xã ấp thôn xóm, đã được hầu hết bà con dưới quê công nhận qua những lần nhờ cậu cài Win XP với crack chuẩn mà cậu không phải nhớ cd key, chỉ cần nhét cái CD không nhãn vào rồi next next gõ key enter như một vị thần. Sau này vì tốc độ công nghiệp hóa hiện đại hóa quá nhanh cộng với thời đại 4.0 lan tỏa đến vùng quê yên bình nên E. đã từ bỏ làng quê với những con PC motherboard màu huyết heo bụi bặm và cái màn hình CRT to bành ki, khăn gói lên Sài Gòn xoay nghề làm thợ gõ bàn phím mưu sinh độ nhật.

Quay trở lại sự vụ lúc ba giờ sáng, E. không ngờ rằng chỉ độ mươi phút sau khi tiếng thở đều đều của cậu hòa nhịp cùng tiếng chó sủa ma văng vảng đầu xóm trọ Sài Gòn thì cách đó một cái eo biển bên xứ Nam Dương(1) kẻ thủ ác đã chực chờ sẵn. E. kể rằng khi ấy cậu có nghe tiếng rung nhẹ của chiếc điện thoại, hình như là báo mail gì đó, nhưng rồi mọi sự lại chìm vào màn đêm tĩnh mịch nhẹ nhàng.

Sáng hôm sau tỉnh dậy, lướt nhanh qua thấy ACTION REQUIRED E. hết hồn biết chuyện chẳng lành liền nhanh chóng gói gém hành lý rồi nhảy lên con Wave phi nhanh như một làn sóng đi gặp Cấp Cao Chiên Da nhờ chi viện gấp.

Vừa may đến nơi thì Chiên Da cũng đã uống được 6,9 ly cà-phê nên vác phím ra múa liền. Tiếng phím blue switch giữa trưa thánh thót vang vọng xa gần, vừa ráng nhìn màn hình vừa liếc hàng xóm vì nghe tiếng “đù má, thằng nào đập đá ồn ào giữa trưa” càng ngày càng gần E. thấy Chiên Da xử lý theo trình tự hết sức nhịp nhàng bày bản.

Xác định xem có phải là unauthorized activity hay không

Việc xác định này rất quan trọng, vì nhiều khi trong lúc thăng hoa không kiểm soát được cảm xúc lẫn bản năng mà E. đã thông qua CDK để deploy cái trời ơi đất hỡi gì đó lên AWS production environment của Tập đoàn Toàn Đập Đá.

  • Coi nhanh Case ID theo như email đã gửi trong Support Center.
  • Billing > Cost & Usage Reports, xổ ra hết để kiểm tra coi có cái nào tốn tiền nhiều mà lạ lạ tháng trước không có không.
  • Mở AWS Console(2) lên, vô IAM coi Credential report coi có account nào lạ không, coi Last activity nào gần nhất tính từ thời điểm nghi ngờ.
  • Tới đây là xong phim rồi, nguyên đống account đậm đà bản sắc văn hóa truyền thống vậy mà đâu lòi ra ông nội sysadmin nghe sịn sò ghê, Chiên Da quay qua liếc E. thằng nào xài account này vậy? E. lắc đầu “tía em cũng không biết, có đứa nào rành tiếng Tây tiếng U đâu mà sính ngoại vầy”. Đến đây cơ bản xác định được có “account lạ” trong hệ thống vừa mới có activity xong, kèm theo đó Support Center nói lộ Access Key, vậy có thể tóm tắt sự vụ: Nam Dương Hắc-cờ đã bằng cách nào đó crawl được rồi thông qua đó tạo “account lạ” phục vụ mưu đồ.

Bay vô hốt shit liền

Chú ý là “hốt” thôi, chứ không phải dọn dẹp sạch sẽ!

Delete and rotate the exposed AWS Access Key: vẫn quay lại IAM, hóa ra Access Key bị lộ là của root account.

Key này đã tạo từ đời tám kiếp nào rồi, thuở Chủ Tịch còn tự tay nắn nót viết từng dòng code. E. ngạc nhiên khi thấy Chiên Da chỉ Make inactive mà không Delete luôn cho an toàn, E. định gặng hỏi nhưng nhìn nét mặt trầm ngâm bên ly cà-phê nên chưa dám mở lời. Không để E. phải khó ở vì nuôi tò mò, Chiên Da trầm ngâm “phàm vạn sự trên đời mà xóa cái một rồi quên đi thì dễ, chỉ có đối diện với nó ban đầu dày vò một chút mới biết cụ thể đau ở đâu để sau này không phạm phải sai lầm lần nữa”. Gật gù, E. kêu chủ quán cho thêm ly cà-phê thứ bảy ít bắp rang cho Chiên Da.

Sau khi đã Make inactive access keys, Chiên Da cùng với E. tiến hành cách ly các dịch vụ bị ảnh hưởng.

Nhìn vô mớ code hổ lốn, không comment, viết lúc thì chuẩn Pascal, xong lại lồng vô Camel case ở trong, tầng tầng lớp lớp một file cả chục ngàn dòng như thác đổ thấy mà hãi hùng. Chiên Da, thở dài ngao ngán bày E. mở Find in Files hay Find in Project của Notepad++ để đi kiếm chỗ nào có cái key này cho lẹ.

Nhưng E. nhếch mép bảo không cần, đống này sau Chủ Tịch thì E. tự tin E. mà số hai thì đời này đã không có…

Kệ E. huyên thuyên về việc y mấy mươi năm maintenance code chứng kiến bao sự đổi thay, nhớ từng cái bug ẩn chỉ cần búng tay fix bằng dấu comment là hết. Chiên Da hỏi “giờ chết vài module có sao không? hay muốn phủi liền”.

Hình search Google.

Cũng may là sau này Chủ Tịch mần ăn khấm khá, trúng được số tiền lớn – nghe nói nhờ chuyển giao công nghệ Phân-lên Bán-nồ – nên có đầu tư thuê thêm một tay Kiếm chác sư Phần mềm mần pặc-tham để hắn vẽ ra mô hình Microservice…

Thành thử may mắn là mấy module xài access key chết thì chỉ không upload được data thôi, còn người dùng vào vẫn bình thường, không hay biết gì.

Lại càng may mắn hơn nữa là mấy cục chết đó lại viết bằng Javascript nên người dùng bình thường vô không được thấy console văng log xanh đỏ gì ra cứ tưởng là trình duyệt web bị lỗi, quả thật một tên mà hạ hai nhạn, vừa không phát hiện hệ thống ngủm mà vừa còn đổ thừa lỗi do một số người dùng nữa. Phen này tổ đãi thật rồi.

  • Thế là tay E. thì ngồi cặm cụi thay access key mới tạo với Permission được attach vô đúng cái policy cần thiết thay thế cho cái root access key lúc nãy đã inactive.
  • Còn Chiên Da thì nhanh tay mở CloudTrail (hóa ra bấy lâu nay không có luôn, chắc ghi log kiểu thảy xuống file txt) tạo thêm một trails management-events rồi làm theo các bước mặc định. Độ non một tuần trà đá miễn phí châm thêm thì cũng đã có Event history, Chiên Da filter theo “User name lạ” lúc nãy để coi hắc-cờ đã làm gì.
  • Có được danh sách các event thì bắt đầu tiến hành xử lý theo thứ tự, cứ từng region một mà làm.
Amazon EC2, Amazon Machine Images (AMIs)
AWS Auto Scaling groups
Amazon Elastic Block Store (Amazon EBS) volumes and snapshots
Amazon Elastic Container Service (Amazon ECS) clusters
Amazon Elastic Container Registry (Amazon ECR) repositories
AWS Lambda functions and layers
Amazon Lightsail instances
Amazon Route 53 domains
Amazon SageMaker notebook instances

Hai người cặm mãi ngóc đầu lên quán đã lên đèn từ khi nào, mấy vị khách ồn ã ban trưa cũng đã về nhà lo việc gia đình hay đi chim chuột nhau mất rồi.

Tạm biệt tên E. Chiên Da còn dặn với theo “báo Chủ Tịch dựng lại hết hạ tầng luôn đi” rồi cũng quầy quả sửa sạn dìa trong trong cơn mưa chiều sắp đổ tới. Không biết tên E. có kịp nghe không nữa.

Trên đường về, Cấp Cao Chiên Da ghé đớp vội dĩa cơm bụi với chén canh đại dương dưới cây dù nước nhiễu tong tong không biết tại nước mưa mà canh thành đại dương hay tại vốn dĩ đại dương đã nhiều nước…

(1) Sau này biết được nhờ tra IP2Location thì thấy IP xuất phát từ ISP PT Telekomunikasi Selular Indonesia, không rõ là có VPN hay không nhưng ít ra cũng có chuyện để mà chém gió.

(2) Nếu không dùng AWS Console thì có thể dùng AWS API hay AWS CLI ngầu hơn nhiều, ngồi ở quán cà-phê thì 96,69% là người ta tưởng hắc-cờ không luôn.

Sep 2022, Sài Gòn đêm mưa trước bão Noru.