Giaosucan's blog - Chia sẻ kiến thức theo cách bá đạo

Ticker

20/recent/ticker-posts

Saving project BaoCaoSu part 2 - Điệp vụ bất khả thi

Tiếp Part 1
Đà Nẵng, một ngày trong tương lai không xa,
Tại một cơ sở massage có tiếng, một người đàn ông đang nằm thư giãn sau một ngày làm việc mệt mỏi. 
Tôi là nhân viên bưu điện, có người gửi anh một gói bưu kiện, xin anh kí nhận.
Sao có người lại biết mình ở đây?? Người đàn ông giật mình
Ông tò mò khi không thấy tên người gửi, mở bưu kiện, một chiếc kính Gucci mới tinh.
Scanning, iris detection…
K1 agent, Delta Fuck, confirmed...

Facial Recognition Technology


K1, tổ chức có một nhiệm vụ bí mật giao cho anh. Dự án BaoCaoSu đang trong tình trạng critical. Hệ thống đã ngừng hoạt động, ảnh hưởng tới hàng triệu người dùng trên toàn thế giới.Chúng ta có nguy cơ mất dự án. BOD đã yêu cầu Delta Fuck vào cuộc. Tổ chức sẽ cung cấp đầy đủ phương tiện để thực thi nhiệm vụ. Anh được quyền lựa chọn team của mình. Nên nhớ đây là nhiệm vụ tối mật, trong trường hợp thất bại, BOD sẽ chối bỏ mọi trách nhiệm, Delta Fuck sẽ bị xóa sổ, không ai thừa nhận. Tin nhắn này sẽ bị hủy trong vòng 30 giây.


Một luồng khói đen bốc lên từ chiếc kính….


Silicon Valley, trụ sở tổ chức Delta Fuck, 10h sáng


Đây là những người mà a đã yêu cầu
K2, một chuyên gia về cloud AWS, đã có trong tay chứng chỉ AWS Professional, AWS DevOps 
K3, lập trình viên 10 năm kinh nghiệm về .NET
K4, Database administrator, SQL expert    


Họ sẽ tham gia với anh trong điệp vụ này. Tất cả danh tính của họ đều được giữ bí mật tuyệt đối, không ai biết sự tồn tại của họ.


F-**, tại một căn phòng bí mật


Hệ thống BaoCaoSu được deploy trên cloud AWS, các server bao gồm app server và database server đều nằm trong VPC, private subnet, đều được attach security group để bảo vệ, chỉ cho phép một vài CIDR nhất định được truy cập. User cũng không thể access trực tiếp vào server từ máy local, tất cả phải qua bastion host
How to Record SSH Sessions Established Through a Bastion Host ...
Máy chủ pháo đài (bastion host) là một máy tính có mục đích đặc biệt trên mạng, được thiết kế và cấu hình riêng để chịu được các cuộc tấn công. Bastion host đóng vai trò là người gác cổng (gatekeeper) cho các kết nối đến và đi. Sở dĩ, bastion host được thiết lập cứng như vậy là do vị trí và mục đích đặc biệt của nó, thường được đặt bên ngoài tường lửa hoặc trong vùng DMZ (một vùng mạng trung lập giữa mạng nội bộ và mạng Internet) và thường liên quan đến những truy cập từ các mạng hoặc máy tính không đáng tin cậy.


K2, tôi cần anh hack vào bastion host, tạo ra một backdoor để chúng ta có thể truy cập vào hệ thống server của BaoCaoSu trên AWS, tôi muốn biết họ architect infra của họ, check được các log trên IIS, xem metrics của CloudWatch xem có vấn đề gì không?


K3, BaoCaoSu được viết bằng .NET MVC, source code được quản lý bởi TFS (Team Foundation Server) tích hợp sẵn trong Visual Studio. Tôi nghi ngờ issue đến từ source code của họ, chúng ta cần access được bộ source này


K4, chiếm quyền DB administrator, lấy được SQL execution plan để phân tích performance của SQL statement


SQL Server Query Execution Plans in SQL Server Management Studio
https://80f9b8fec919ac5ebc1a-384085a95109bffb325fe35cb6202ded.ssl.cf2.rackcdn.com/Picture3-6f20fcdd85d5be81d2dd7e8826063fdc55b8c2f91dcaf1060f259071df1b8105.png


SQL execution plan được generate sau khi Transaction-SQL được thực hiện. Nó chứa các thông tin về runtime như resource usage (CPU, Memory) metrics, runtime warning. Bằng việc phân tích SQL execution plan, DBA có thể đánh giá được performance của SQL để đưa ra các biện pháp tối ưu SQL


Leader, sau khi thực hiện Vulnerability scanning, tôi phát hiện họ dùng bản MSSQL server bản cũ có nhiều lỗi bảo mật, RDS chỉ là single database, không có khả năng scale horizontal, tôi đã chiếm được quyền admin bằng kĩ thuật SQL injection 


Màn hình của K4 hiện lên admin console của MS Management Studio, chỉ trong vài nốt nhạc, các thông tin quan trọng của database đã hiện lên từ SQL execution plan, database table, SQL statement.


Các table có hàng triệu record, dữ liệu tích lũy trong vòng 8 năm. 
Tôi phát hiện nhiều vấn đề trong database
Họ đang lưu ASPState trong database, có nguy cơ gây ra Performance bottleneck, nhiều table Log có dung lượng quá lớn hàng chục GB data.
Các ứng dụng web luôn cần duy trình state, gọi là session state của user. Hiểu một cách đơn giản thế này, session là một phiên làm việc của user (Login, access vào main page, thực hiện update, delete blo bla) chỉ kết thúc khi close ứng dụng. Chẳng hạn như lưu thông tin đăng nhập thông tin sản phẩm order vào session. Mỗi session đều có một session ID được cấp phát khi user làm việc, và bị hủy sao khi kết thúc. Một ứng dụng có hàng triệu user thì số lượng session sẽ vô cùng lớn.


Project BaoCaoSu được viết bằng ASP.NET, họ sử dụng ASPState database để lưu các website session trên SQL server database


aspnet_regsql.exe -ssadd -sstype p -S {SQL Instance} -U {Username} -P {Password}


ASPState bottleneck đã gây ra hiện tượng write IOPS tăng vọt đột ngột ở database.


Có biện pháp nào giải quyết không?


Nên sử dụng Elasticache để lưu các session thay vì lưu vào database, Elastic cache dùng in-memory storage có thể cải thiện performance. Sửa lại webconfig để sử dụng elastic cache


<sessionState mode="Custom" customProvider="MySessionStateStore">
  <providers>
    <add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" host="aspnet.k30h8n.0001.use1.cache.amazonaws.com" accessKey="" ssl="false" />
  </providers>
</sessionState>


Leader, tôi đã truy cập được vào BaoCaoSu infra
Đã access được vào TFS, toàn bộ source code đã được clone về


Lần lượt các thông tin được hiện lên trên màn hình, source code, log, infra, cloudwatch tất cả…


Toàn bộ team chết lặng
Cái gì thế này…



5.10 Khoang làm việc của dự án BaoCaoSu, 0h sáng


PM, tôi phát hiện một số action lạ trên cloud trail 


Chúng ta đã bị hack…


(Hết  tập 2)

Đăng nhận xét

2 Nhận xét