- Các đoàn tàu Impuls 45WE của Newag tại Ba Lan sau khi được bảo trì độc lập đã không thể khởi hành dù chẩn đoán đều bình thường, và xưởng bảo trì SPS đã nhờ Dragon Sector đảo ngược kỹ thuật máy tính trên tàu
- Các nhà nghiên cứu đã phân tích bus CAN, trích xuất bộ nhớ dựa trên TriCore, cải tiến Ghidra rồi tìm ra các cờ khóa và điều kiện khởi động trong phần mềm để giúp tàu chạy lại
- Trong mã của một số đoàn tàu có các điều kiện chặn khởi động nếu ở lại hơn 10 ngày tại tọa độ GPS của một số xưởng bảo trì nhất định, khóa khi thay linh kiện, điều kiện hỏng sau 1 triệu km và điều kiện báo lỗi máy nén khí theo ngày tháng
- Tổng cộng có 29 đoàn tàu được phân tích, và ngoài 5 đoàn thì các đoàn còn lại đều phát hiện những “surprises” nằm ngoài hướng dẫn vận hành chính thức; vấn đề lan ra nhiều khu vực như Wrocław, Opole, Krakow, Szczecin, Warsaw
- Vụ việc dẫn tới kiện tụng và điều tra của cơ quan thực thi pháp luật, nhưng chưa xác nhận được biện pháp cụ thể từ cơ quan bảo vệ người tiêu dùng/cạnh tranh hay cơ quan vận tải đường sắt
Tàu Newag Impuls dừng hoạt động sau bảo trì
- Sự việc bắt đầu vào mùa xuân năm 2022, khi đoàn tàu đầu tiên trong số 11 đoàn Impuls 45WE do Lower Silesian Railways vận hành, sau đợt bảo trì bắt buộc ở mốc 1 triệu km, không thể khởi hành
- Việc bảo trì do đơn vị độc lập Serwis Pojazdów Szynowych(SPS) phụ trách
- Newag cũng tham gia đấu thầu nhưng đề xuất của nhà sản xuất đắt hơn khoảng 750.000 USD
- SPS trúng thầu với điều kiện thực hiện bảo trì 11 đoàn tàu với chi phí khoảng 5,5 triệu USD
- SPS đã tháo rời, kiểm tra và lắp ráp lại tàu theo bộ tài liệu bảo trì khoảng 20.000 trang do nhà sản xuất cung cấp, nhưng dù máy tính trên tàu hiển thị trạng thái bình thường thì tàu vẫn không chạy
- Bộ nghịch lưu không cấp điện áp cho động cơ, và các kỹ thuật viên bảo trì không thể tìm ra nguyên nhân chỉ bằng tài liệu hướng dẫn cùng kiểm tra điện và cơ khí
Các lần dừng lặp lại và rủi ro hợp đồng ngày càng lớn
- Đoàn tàu thứ hai cũng dừng theo cách tương tự sau cùng kiểu bảo trì, và nhà sản xuất Newag từ chối hỗ trợ
- Đoàn thứ ba lỡ lịch kiểm tra do vấn đề pin, nên đoàn thứ tư được đưa vào xưởng thay thế
- Khi nối đoàn tàu thứ tư đang hoạt động bình thường với đoàn bị dừng, cả đoàn bình thường cũng dừng theo
- Nguyên nhân việc này đến nay vẫn chưa được xác định
- Tại một xưởng bảo trì khác ở Szczecin cũng xuất hiện trường hợp tàu Impuls không thể khởi động sau bảo trì
- Việc 6 đoàn tàu dài của Lower Silesian Railway phải rút khỏi khai thác dẫn tới cắt giảm lịch chạy, điều động tàu thay thế và tình trạng đông đúc hơn trên các đoàn ngắn hơn
- Newag giải thích rằng tàu bị hệ thống “an toàn” chặn lại, nhưng trong bộ 20.000 trang tài liệu không hề nhắc tới hệ thống này
- Mỗi đoàn tàu nằm chết trong xưởng khiến SPS chịu khoản phạt hợp đồng hơn 1.000 USD mỗi ngày, làm áp lực ngày càng lớn
Dragon Sector đảo ngược kỹ thuật
- SPS tìm kiếm “Polish hackers” và tìm thấy Dragon Sector, nhóm nổi tiếng trong giới CTF, rồi hai bên ký hợp đồng
- Dự án có sự tham gia của Michał “Redford” Kowalczyk, Sergiusz “q3k” Bazański, Kuba “PanKleszcz” Stępniewicz
- Redford và q3k từng được biết đến qua vụ hack laptop Toshiba
- Kuba có kinh nghiệm về tự động hóa công nghiệp
- Tại hiện trường, các nhà nghiên cứu nhận được một đoàn tàu không chạy, 2 máy tính dự phòng và các tệp SDK từ hãng sản xuất máy tính
- Phân tích ban đầu bắt đầu bằng cách nghe lén bus CAN, nhưng do không có tài liệu giao thức nên rất khó diễn giải lưu lượng
- SDK chỉ hỗ trợ nạp phần mềm mới, không có chức năng trích xuất phần mềm hiện có
- Khi họ nạp bản phần mềm cũ tìm được lên máy tính dự phòng đầu tiên, máy đó ngừng phản hồi
- Nhóm phải tiếp tục công việc với chiếc máy tính dự phòng còn lại duy nhất
- Cuối cùng họ tìm ra giao diện gỡ lỗi và tải bộ nhớ thiết bị xuống từng byte
- Máy tính trên tàu dựa trên kiến trúc TriCore cũng được dùng trong lĩnh vực ô tô; do thiếu trình disassembler tốt, họ đã cải tiến một phần Ghidra để phân tích mã
Tìm ra điều kiện khởi động ngay trước hạn chót
- Sau khoảng một tháng rưỡi, Lower Silesian Railway không thể chờ thêm nên quyết định hợp tác với Newag để sửa và bảo trì các đoàn tàu hỏng
- Dự kiến hợp đồng với SPS sẽ bị chấm dứt sau 1 tuần, nên nhóm nghiên cứu buộc phải cho ra kết quả trong thời gian còn lại
- Họ so sánh ảnh bộ nhớ máy tính của tàu bình thường với tàu hỏng
- Mỗi đoàn tàu có bộ tính năng và phiên bản phần mềm khác nhau nên không thể so sánh đơn giản
- Họ tìm thấy khác biệt ở các giá trị được thiết lập trên một số tàu nhưng bằng 0 trên tàu khác
- Có thể chạy máy tính trong thời gian ngắn ngay cả khi đã tháo khỏi tàu để kiểm tra trạng thái sẵn sàng vận hành của bộ nghịch lưu, nên việc thử nghiệm trên bàn là khả thi
- Khi chỉ còn chưa đầy một ngày trước hạn, họ tìm thấy một cấu hình cờ có thể giúp tàu chạy, nhưng trong lúc thử nghiệm thì tụ điện trên chiếc máy tính trên tàu còn hoạt động cuối cùng bị cháy
- Sau nhiều nỗ lực ghép 2 máy tính hỏng lại, họ sửa được chiếc máy bị cháy và cấu hình nó để khởi động tàu vào lúc 2 giờ sáng
- Một nhà nghiên cứu mang máy đó đến xưởng bảo trì nhưng chuyến tàu bị chậm, và sau khi đến nơi thì chiếc máy được gắn vào vẫn chưa thể khởi động tàu ngay
- Sau khi thảo luận thêm, họ tìm ra còn thiếu một cờ nữa và 8 giờ 42 sáng đã khởi động tàu thành công
- Đến 9 giờ 30 sáng, đoàn đại biểu của Lower Silesian Railway xác nhận tàu có thể được hồi sinh và không chấm dứt hợp đồng với SPS
Các điều kiện khóa bị giấu trong mã
- Qua nhiều tháng phân tích và đảo ngược kỹ thuật, nhiều điều kiện gây mất khả năng vận hành đột ngột đã được phát hiện trong phần mềm của các đoàn tàu do Newag cung cấp
- Các con số như
53.13845,17.99011trong mã là tọa độ GPS, trỏ đến khu đất của PESA gần ga Bydgoszcz Główny - Sau đó người ta còn phát hiện tọa độ của các xưởng khác tại Ba Lan có thể bảo trì và sửa chữa tàu
- Trong mã có điều kiện vô hiệu hóa khả năng khởi động nếu tàu ở trong một trong các khu vực xưởng nhất định ít nhất 10 ngày
- Một trong các tọa độ đó là xưởng bảo trì của chính Newag
- Với tọa độ xưởng Newag thì tồn tại điều kiện logic khác, được cho là nhằm mục đích thử nghiệm
- Ở các đoàn tàu khác cũng phát hiện thêm những điều kiện khóa riêng
- Nếu thay một số linh kiện cụ thể thì tàu sẽ bị chặn thông qua việc kiểm tra số sê-ri của linh kiện
- Có một tùy chọn mở khóa bằng cách nhấn một chuỗi nút nhất định trên buồng lái và màn hình máy tính trên tàu
- Sau khi báo chí đưa tin về việc khởi động thành công tàu Impuls, các đoàn tàu đã nhận bản cập nhật phần mềm để xóa tùy chọn “fix” này
- Trên các tàu khác còn phát hiện mã ra lệnh cho tàu “hỏng” sau mốc 1 triệu km
Báo lỗi máy nén khí phát sinh do điều kiện ngày tháng
- Một đoàn tàu khác từ chối hoạt động vào ngày 21/11/2022 dù khi đó không hề trong quá trình bảo trì
- Máy tính báo lỗi máy nén khí, nhưng các kỹ thuật viên bảo trì nhận định máy nén không có vấn đề gì
- Phân tích mã cho thấy điều kiện sau
- nếu ngày từ 21 trở lên
- và tháng từ 11 trở lên
- và năm từ 2021 trở lên
- thì báo lỗi máy nén khí
- Đoàn tàu này ban đầu dự kiến bảo trì vào tháng 11/2021, nhưng thực tế được đưa vào bảo trì sớm hơn và chỉ quay lại khai thác vào tháng 1/2022
- Trong tháng 11/2021 điều kiện đó vô tình chưa kích hoạt, và phải đến ngày 21/11/2022 điều kiện lỗi được sắp đặt mới được thỏa mãn
Thiết bị kết nối GSM được phát hiện trong phần cứng
- Không chỉ phần mềm, trong phần cứng cũng phát hiện thiết bị bất thường
- Trên một bộ tàu, các nhà nghiên cứu tìm thấy thiết bị ghi “UDP<->CAN converter”
- Nó có vẻ là thiết bị cho phép giao tiếp từ xa với tàu
- Việc tháo thiết bị ra cũng không làm mất chức năng nào cần để vận hành
- Máy tính trên tàu đang gửi thông tin trạng thái khóa tới thiết bị này, và bản thân thiết bị được nối với modem GSM
Vấn đề lan ra nhiều khu vực và quy mô phân tích
- Tin tức về việc SPS sửa được các đoàn tàu “hỏng” của Newag lan sang các công ty khác, và cho thấy những vấn đề tương tự là khá phổ biến
- Tại Wrocław, có 13 đoàn Impuls được phân tích
- Ở các khu vực khác cũng xác nhận có tàu gặp vấn đề
- Kolej Mazowieckie: 1 đoàn
- Opole: 2 đoàn
- Krakow: 4 đoàn
- Zielona Góra: 1 đoàn
- Szczecin: 4 đoàn
- Warsaw: 1 đoàn
- Công cụ do nhóm nghiên cứu tạo ra đã gỡ bỏ khóa phần mềm trên máy tính tàu, nhờ đó từng đoàn tàu có thể được sửa chữa
- Tổng cộng phần mềm của 29 đoàn tàu đã được phân tích, và ngoài 5 đoàn thì các đoàn còn lại đều phát hiện yếu tố nằm ngoài hướng dẫn vận hành chính thức
Các bước xử lý tiếp theo và phạm vi công khai
- Vụ việc hiện đang trong quá trình kiện tụng
- Không rõ Office of Consumer and Competition Protection hay Railway Transport Office của Ba Lan đã có biện pháp cụ thể nào hay chưa
- Các nhà nghiên cứu đã thông báo phát hiện của mình cho CERT Polska
- CERT Polska đã thông báo cho “các cơ quan có liên quan”
- Vụ việc hiện do cơ quan thực thi pháp luật xử lý
- Nội dung này là bản tóm lược ngắn từ phần trình bày của Jakub Stępniewicz, Sergiusz Bazański, Michał Kowalczyk tại hội nghị Oh My H@ck ngày 5/12/2023
- Bản gốc đã lược bỏ đáng kể so với toàn bộ phân tích kỹ thuật, và cho biết hy vọng các nhà nghiên cứu sẽ công bố tài liệu kỹ thuật riêng biệt
1 bình luận
Ý kiến trên Hacker News
Cũng có bài mới liên quan: Polish trains lock up when serviced in third-party workshops - https://news.ycombinator.com/item?id=38530885 - tháng 12 năm 2023, 347 bình luận
Thật khó tin là họ có thể trơ trẽn đến mức này. Mã biến đầu máy thành cục gạch nếu tọa độ GPS nằm trong khu vực của xưởng bảo trì đối thủ hơn 10 ngày cơ đấy
Tôi thấy việc này vượt xa mức làm cho sửa chữa trở nên khó khăn, như giao diện không được tài liệu hóa hay firmware ký bằng mật mã; nó gần với phá hoại tài sản có chủ ý hơn. Tôi không biết hệ thống pháp luật Ba Lan, nhưng không tưởng tượng nổi chuyện này có thể được bỏ qua
Tàu đã tồn tại và phải vận hành, nhưng công ty bảo trì/sửa chữa lại không thể sửa đổi phần mềm một cách hợp pháp vì bản quyền. Đúng là tiến thoái lưỡng nan. Tôi mong công ty đó bị phạt thật nặng và thậm chí bị truy tố hình sự, nhưng nghi ngờ là thực tế có được như vậy không
Một đội pháp lý có động lực chắc sẽ tìm được các cáo buộc nghiêm trọng có thể áp dụng. Đặc biệt nếu đoàn tàu hay đầu máy đó thuộc hạ tầng trọng yếu, dù điều đó không được đảm bảo
Việc cài một bắt tay bí mật rồi làm tài liệu quy trình sơ sài để khiến đối thủ trông có vẻ bất tài là một chuyện; còn cố tình làm hỏng sản phẩm của mình vì nó được đưa vào xưởng bảo trì của đối thủ lại là chuyện ở một đẳng cấp khác
Tiêu đề hơi gây hiểu lầm. “Gate” trong vụ này không phải là gian dối về độ thân thiện môi trường để vượt chứng nhận trong điều kiện nhân tạo như Dieselgate, mà là mô phỏng lỗi giả
Công ty đã hard-code một thuật toán: nếu dựa trên thông tin vị trí mà xác định rằng công ty khác đã sửa tàu, thì báo cáo như thể các bộ phận đang hoạt động bình thường, chẳng hạn máy nén, bị hỏng và dừng vận hành tàu
Tất nhiên hai vụ không thể hoàn toàn giống nhau, nhưng rõ ràng là vì sao phép ví von đó xuất hiện
Một là làm cho tàu không hoạt động sau khi ở 10 ngày tại địa điểm bảo trì của đối thủ dựa trên GPS. Hai là trong một firmware cụ thể, hard-code để giả vờ rằng máy nén bị hỏng vài ngày sau đợt bảo trì dự kiến tiếp theo
Phần tệ nhất là: “Ở Ba Lan khó tìm được cơ quan nào làm gì hơn ngoài việc bày tỏ sự quan tâm lịch sự đối với vấn đề này. Cũng không rõ Cơ quan Bảo vệ Người tiêu dùng và Cạnh tranh hay Cơ quan Giao thông Đường sắt đã có hành động gì”
Cơ quan bảo vệ người tiêu dùng không có quyền lực mạnh bằng các cơ quan này
Cuộc thảo luận ở bài trước về bài viết liên quan cũng đáng tham khảo: https://news.ycombinator.com/item?id=38530885
Giải pháp cho những vấn đề kỳ quặc về điều khiển động cơ như gian lận kiểm tra khí thải hay cản trở sửa chữa bên thứ ba có thể là chuẩn hóa giao diện của các hệ thống này
Nếu đầu ra cảm biến được chuẩn hóa, ta có thể hoán đổi nhiều thành phần để kiểm tra xem hệ thống có đang lừa cơ quan quản lý hay không
[1]: https://wheelsports.co/formula-1s-standardised-ecu-explained...
Tôi có một người bạn sở hữu WRX; xe không có bộ xúc tác, lắp turbo lớn và đã tune, nên về lý thuyết tuyệt đối không được qua kiểm tra khí thải. Vậy mà dữ liệu cảm biến được tổng hợp và điều khiển phần liên quan, nên không có mã lỗi nào và lần nào cũng qua trơn tru
Sẽ tốt nếu loại bỏ hố đen mang tên firmware và cho phép kiểm toán
Không cần chuẩn hóa hoàn toàn; chỉ cần tính mở là được. Dù vậy về cơ bản đó vẫn là hướng đúng
Có vẻ họ đã dùng phần mềm để cố tình cản trở nhằm ngăn khách hàng dùng dịch vụ bên thứ ba rẻ hơn thay vì dịch vụ của nhà sản xuất
Tôi tò mò tòa sẽ phán thế nào
Việc các nhà lập pháp, tòa án và công chúng lạc lối trước các vấn đề công nghệ là một vấn đề, nhưng tội này có lẽ hoàn toàn có thể khớp với các điều luật hình sự hiện có về hành vi cản trở. Phương pháp thì “mới”, nhưng bản thân tội phạm là kiểu kinh điển
Nhìn chung chất lượng firmware của tàu cho cảm giác không tốt lắm, và hy vọng vụ bê bối lần này sẽ dẫn đến việc rà soát nghiêm ngặt hơn
Ba năm trước, Deutsche Bahn đã công khai phàn nàn về các vấn đề phần mềm “kỳ quặc” trên các đoàn tàu Bombardier mới được bàn giao. Ví dụ, khi lái tàu đổi hướng chạy, phần mềm của tàu bị crash, và phải mất 1 giờ để khởi động lại [0]. Thụy Sĩ cũng gặp vấn đề tương tự vào năm 2018 [1]
Với tư cách một nhà khoa học máy tính, chuyện này thật đáng xấu hổ. Chỉ cần so với những đoàn tàu cũ sản xuất ở Đông Đức thập niên 1980 [2] từng kéo các toa khách Tây Đức từ thập niên 1950 [3] ở đây cho đến gần đây. Chúng hầu như không có, hoặc hoàn toàn không có, thiết bị điện tử số, và cũng không có thời gian boot. Chúng cứ thế hoạt động. Nếu không chạy, lái tàu thường cũng biết phải gõ búa vào chỗ nào trong động cơ để sửa. Không thể kỳ vọng lái tàu hack firmware của tàu rồi mở gdb để tìm xem vì sao nó không chịu chạy
[0] https://www.sueddeutsche.de/wirtschaft/deutsche-bahn-ic-1.47...
[1] https://bahnblogstelle.com/33872/twindexx-swiss-express-soft...
[2] https://de.wikipedia.org/wiki/DR-Baureihe_243
[3] https://de.wikipedia.org/wiki/N-Wagen
Các công ty làm ra những thứ có phần mềm bên trong không ở trong một thị trường sẵn sàng trả cho nhân sự phần mềm gấp 2–3 lần trước đây. Còn lại là những người chấp nhận sự thú vị đó như một phần bù cho chênh lệch tổng đãi ngộ, và những người không vào được các nơi trả cao hơn. Phần lớn các hệ thống trọng yếu về an toàn mà chúng ta dùng đang được xây dựng bởi những người như vậy. So sánh đãi ngộ của developer ở X và SpaceX sẽ thấy thị trường vận hành ra sao. Sự thú vị cũng được tính vào tổng đãi ngộ, nhưng hệ quả là cả những người không phải developer giỏi cũng rẽ sang thiết kế quy trình và công cụ mới trong lĩnh vực này. Họ có thể bám lấy trào lưu full-stack đã lỗi mốt rồi cố áp nó vào firmware tàu. Sẽ không ngạc nhiên nếu trong Jira có lượng văn bản nhiều gấp 10 lần Git, họ phát triển kiểu scrum-thác nước, và đưa REST API hay kiến trúc hướng dịch vụ vào các hệ thống nhúng trọng yếu về an toàn
Ngoài những thứ cỡ Tc3 của Beckhoff, họ còn chưa thực sự chạm tới hướng đối tượng, và cả lĩnh vực vẫn mắc kẹt trong mỏ màn hình xanh của quá khứ. Họ quản lý độ phức tạp bằng các tài liệu tiêu chuẩn mỏng, không có cả quản lý phiên bản, trong khi máy móc ngày càng phức tạp hơn ở khía cạnh cảm biến và cơ cấu chấp hành. Không thể đối xử với máy móc hiện đại như một thiết bị nhúng nhỏ dành cho sở thích cá nhân, nhưng ngành này lại làm vậy. Các lập trình viên bên ngoài bước vào, kiếm được khá nhiều tiền khi giải quyết những vấn đề của ngày hôm qua bằng kiến trúc phần mềm đúng nghĩa và thực hành phát triển C tử tế. Nhưng ngành này không học được gì từ đó. Với họ, việc làm phần mềm sẽ mãi không phải là một nghề chuyên nghiệp
Nhiều đoàn tàu hiện đại gặp các vấn đề phần mềm chạy tàu cơ bản [0] và chậm trễ trong phê duyệt phần mềm [1]. Nhưng tôi cho rằng bước lùi tệ nhất là mất khả năng tương thích. Các tàu điện hiện đại trên thực tế chỉ hoạt động cùng các tàu điện trong cùng một lô. Ngay cả cùng một mẫu, nếu hai công ty đặt hàng riêng thì thường không khớp với nhau; còn việc dùng chung các tàu điện của công ty khác nhau hoặc đặt cách nhau hơn 10 năm gần như nên từ bỏ. Ngược lại, trước thời kỹ thuật số, việc dùng chung các thế hệ tram khác nhau và chỉnh lại dây để tương thích là chuyện phổ biến. Các toa khách cũ hoạt động cùng nhau không vấn đề gì, nhưng ghép IC2 với Railjet, hoặc RailJet với ICE-L thì không dễ. Cũng thường có những trường hợp chỉ một số đầu máy và toa khách nhất định mới hoạt động với nhau
Các hệ thống đã được máy tính hóa có độ phức tạp cao và tính mờ đục lớn, nên việc làm cho chúng hoạt động cùng nhau khó hơn nhiều. Bo mạch logic truyền thống nhìn chung có thể reverse engineering khá dễ, nhưng reverse engineering phần mềm là một công việc rất chuyên sâu. Hiện tượng này cũng nổi bật trong các lĩnh vực khác, nơi khả năng tương tác xấu đi rõ rệt khi chuyển sang các giao thức số độc quyền
Điều này một phần là vì phần mềm mờ đục nên khó được phê duyệt hơn công nghệ trước đó, nhưng chất lượng thực tế thiếu hụt cũng là nguyên nhân lớn. Một trong những lý do Bombardier rơi vào tình thế khó khăn lớn cũng là phần mềm kém, đến mức một hợp đồng đặt hơn 40 đoàn tàu đã bị hủy ([2])
Tôi nghĩ việc tạo ra phần mềm đáng tin cậy và có thể hiểu được khó hơn nhiều so với tạo ra mạch logic hay hệ thống cơ khí. Tôi không biết lời giải là gì, nhưng đây là vấn đề đã tồn tại từ lâu
[0]: https://www.vrt.be/vrtnws/de/2013/02/12/belgische_bahn_storn...
[1]: https://www.augsburger-allgemeine.de/augsburg/Neue-Zuege-auf...
[2]: https://de.wikipedia.org/wiki/Bombardier_Talent_3#%C3%96BB
Tôi chỉ đang tiêu thụ nội dung tiếng Anh. Nội dung từ các nước khác thì chỉ tiếp cận được những gì rò rỉ ra qua các hãng truyền thông lớn
Điều này khiến tôi tự hỏi có bao nhiêu nội dung hay có thể được dịch
Tuy nhiên, ít nhất trong những khu vực có trình độ giáo dục cao hơn trên thế giới, tiếng Anh giờ đây, trớ trêu thay, đã trở thành ngôn ngữ chung, và nhiều người dù thoải mái hơn với tiếng mẹ đẻ vẫn thường dịch những tác phẩm tốt nhất của mình sang tiếng Anh để được đọc rộng rãi hơn. Các bài báo khoa học là ví dụ tiêu biểu. Có lẽ món quà lớn nhất mà nước Anh đã trao cho thế giới chính là tiếng Anh
Vậy mà tôi lần đầu biết toàn bộ chuyện phụ thuộc vào nhà cung cấp của các đoàn tàu này là trên HN. Nếu không thì có lẽ tôi đã hoàn toàn không biết, hoặc phải vài tuần hay vài tháng sau mới biết