• Thứ Hai, 10/11/2014 12:48 (GMT+7)

    Tìm điểm yếu của các chương trình quản lý mật khẩu

    Nguyễn Như Dũng
    (PCWorldVN) Mặc dù thế giới đã nghĩ ra nhiều cách xác thực và kiểm soát truy cập, mật khẩu vẫn là thứ phổ biến nhất và cũng dễ bị tổn thương nhất.

    Vì lý do an toàn, nhiều cổng thông tin và dịch vụ trực tuyến đã cấm người dùng tạo dùng mật khẩu đơn giản. Điều đó một mặt là tốt nhưng mặt khác chỉ gây ra bất tiện. Nếu nhân thực tế này với hàng chục trang web tương tự, chúng ta sẽ vấp phải thực tế rất đau đầu. Để loại bỏ khoảng cách giữa các yếu tố con người và an toàn dữ liệu, người ta đã dùng đến các chương trình quản lý mật khẩu hỗ trợ tổ chức mật khẩu của người sử dụng. Tuy nhiên, phương pháp này lại cho thấy sự an toàn của người dùng giờ đây chỉ còn phụ thuộc vào một mật khẩu chủ.

    CẢNH BÁO: Thông tin được cung cấp trong bài cho mục đích thông tin. Ban biên tập không chịu trách nhiệm trước bất kỳ thiệt hại nào có thể gây ra bởi nội dung.

    Bài viết này tiếp cận tới việc bảo vệ chương trình quản lý mật khẩu và xem xét một số lựa chọn cho việc tấn công vào các chương trình quản lý mật khẩu phổ biến để đoạt được mật khẩu chủ hoặc để có được một phần dữ liệu lưu trữ trong cơ sở dữ liệu mật khẩu. Trong số các chương trình quản lý mật khẩu được khảo sát, chúng tôi chọn ra năm giải pháp phổ biến nhất dành cho Microsoft Windows:

    Chúng ta sẽ kiểm tra lỗ hổng của từng giải pháp thông qua các cuộc tấn công như sau:

    • Tấn công vào mật khẩu chủ
    • Tấn công vào cơ sở dữ liệu mật khẩu
    • Tấn công DLL Hijacking

    Căn cứ vào kết quả kiểm tra, chúng ta sẽ cho điểm tương ứng: Kém, Trung bình hoặc Tốt.

    Tấn công vào mật khẩu

    Như đã biết, chương trình quản lý mật khẩu không giữ lại các mật khẩu chủ tại bất cứ đâu trên máy tính. Mỗi khi sử dụng đến nó, người sử dụng phải nhập thủ công. Để đánh chặn các mật khẩu đó, hacker có xu hướng sử dụng keylogger cộng với ghi chép sự di chuyển con trỏ và ảnh chụp màn hình nếu thiết bị có một bàn phím ảo. Tuy nhiên, trong trường hợp này, chúng tôi không ghi lại trình điều khiển phức tạp để đánh chặn các tổ hợp phím và ảnh chụp màn hình vì chúng có thể đặt cuộc tấn công của chúng tôi vào điều kiện của phòng thí nghiệm và dễ dàng phát hiện bởi chương trình diệt virus. Chúng tôi tìm ra một phương pháp không mới nhưng thật thú vị để có được mật khẩu trực tiếp từ cửa sổ nhập thông qua giao diện lập trình ứng dụng API SendMessage với tham số WM_GETTEXT. Phương pháp này đáng chú ý vì nhiều phần mềm diệt virus không nhận ra nó như một nguy hiểm tiềm tàng, và được thực thi với vài dòng lệnh cộng với có thể chạy nó mà không cần đến quyền quản trị.

    Ngoài ra, tấn công thông qua SendMessage có thể được sử dụng để nhận dữ liệu văn bản từ bất kỳ cửa sổ ứng dụng nào. Vì vậy, ngay cả khi không lấy được mật khẩu chủ, vẫn có xác suất cao trong việc lấy được một phần hoặc toàn phần nội dung của cơ sở dữ liệu sau khi nó được đưa vào hoạt động.

    DLL Hijacking

    Ngoài ra, chúng ta sẽ kiểm tra mức độ tổn thương của mỗi chương trình quản lý mật khẩu trước việc tấn công DLL Hijacking, để xem mỗi chương trình trong chúng được nạp thư viện động thế nào cho phù hợp. Và nếu phát hiện khả năng thay thế thư viện tải sang phía mình thì nó sẽ có nghĩa là có thể thực thi mã tùy ý trên hệ thống. Mặc dù cuộc tấn công này có thể cần tới một số lượng lớn các ứng dụng khác nhau, trong trường hợp của một chương trình quản lý mật khẩu, nó vẫn có sắc thái riêng. Nhiều người dùng thường xuyên làm việc với máy tính khác nhau, vì vậy họ thường khởi động chương trình quản lý mật khẩu từ các thiết bị di động. Nếu mỗi lần khởi động máy đều thực hiện từ thư viện trái phép, trên thực tế, chương trình quản lý mật khẩu đã biến thành tác nhân phân tán virus.

    Viết SendMessage-Exploit

    Viết SendMessage-Exploit cho từng chương trình quản lý mật khẩu không hiệu quả nên hãy viết đa năng. Ưu điểm của Exploit như thế nằm ở chỗ với sự giúp đỡ của nó, chúng ta không chỉ có thể lấy mật khẩu chủ và các mật khẩu đã lưu trong chính CSDL mà còn sử dụng nó cho các ứng dụng khác có mẫu điền mật khẩu. Trong thực tế, về chức năng, chúng ta đã có được một công cụ hack đơn giản và thuận tiện, cho phép nhận các mật khẩu và nhanh chóng đưa ra các câu trả lời cho các câu hỏi bất kỳ của ứng dụng. Bây giờ, chúng ta sẽ thực hành mã hóa.

    Trước hết, chúng ta cần chuẩn bị một bản ghi nhớ cho việc áp dụng các dữ liệu mới và để xác định cửa sổ xử lý chính dưới con trỏ, sau đó sẽ nhận xử lý của các cửa sổ con và chuyển nó cho chức năng tiếp theo để nhận ra các nội dung của cửa sổ.

    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
    Memo1->Lines->Clear();
    HWND h;
    POINT Point;
    GetCursorPos(&Point);
    h = WindowFromPoint(Point);
    EnumChildWindows(h,(WNDENUMPROC)EnmWndwsWnd,0);
    }

    Chức năng EnmWndwsWnd chịu trách nhiệm với việc thu nội dung của các cửa sổ con.

    BOOL CALLBACK EnmWndwsWnd(HWND h,LPARAM lParam)
    {
    if (IsWindowVisible)
    {
    char g[255];
    GetClassName(h,g,255);
    std::string text;
    WPARAM ln = SendMessage(h,WM_GETTEXTLENGTH,0,0);
    if(ln>0)
    {
    char *buf = new char[ln+1];
    LRESULT got = SendMessage(h,WM_GETTEXT,ln+1,(LPARAM)buf);
    if((LRESULT)ln == got)
    text = buf;
    delete [] buf;
    Form1->Memo1->Lines->Add((String)g+":"+text.c_str());
    }
    }
    return TRUE;
    }

    Sau khi bắt đầu chương trình bằng cách sử dụng bộ đếm thời gian, chúng ta sẽ theo dõi vị trí của con trỏ trên màn hình và xác định các văn bản dưới nó nghĩa là chỉ cần đưa con trỏ lên khu vực mong muốn để ngay lập tức tìm ra mật khẩu. Ngoài ra, với công cụ này, ta có thể tìm thấy nội dung văn bản của tất cả các cửa sổ trong ứng dụng. Tính năng này rất hữu ích để nhanh chóng quét các nội dung của cơ sở dữ liệu mật khẩu sau khi chương trình quản lý mật khẩu hoạt động.

    Tìm kiếm lỗ hổng DLL Hijacking

    Trong trường hợp của chúng ta, để phát hiện DLL Hijacking có thể sử dụng chương trình Procmon hiện đã phổ biến. Ngoài Procmon, chương trình tiện ích Monitor API cũng phù hợp, nơi tại trình đơn cài đặt có liên quan, bạn phải xác định chức năng đánh chặn LoadLibrary và LoadLibraryEx trước tiên. Nếu thư viện được hiện lên mà không có chỉ định đường dẫn đầy đủ thì chúng ta vẫn có cơ hội để tìm thấy tập tin DLL bị tổn thương. Bây giờ, chúng ta viết một đoạn mã nhỏ báo hiệu sự hiện diện của lỗ hổng và là một bằng chứng đột nhập máy tính.

    #include <windows.h>
    int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
    {
    WinExec("calc.exe", 0);
    return 1;
    }

    Thư viện tạo ra sẽ mở trình tính toán (calculator) mỗi khi nó tải các ứng dụng. Vì vậy, chúng ta có thể đánh giá rõ ràng sự hiện diện của DLL Hijacking.

    Thông tin: Tất cả các lỗ hổng được mô tả trong Kaspersky Password Manager và Sticky Password đã tồn tại từ ba năm trước đây. Mặc dù các nhà cung cấp đã được cảnh báo nhưng bạn thấy đó, vấn đề vẫn tồn tại.
    Kaspersky Password Manager 5.0.0.176

    Bây giờ là lúc trực tiếp đánh giá mức độ an toàn của các chương trình quản lý mật khẩu hiện đại. Đầu tiên, chúng tôi khảo sát Kaspersky Password Manager. Bàn phím ảo có thể giúp Kaspersky Password Manager trong trường hợp gặp keylogger, nhưng trong trường hợp của chúng tôi, mật khẩu chủ đã được thu thập ngay lập tức mà không có bất kỳ khó khăn nào. Ngay từ hiệp đầu, Kaspersky Password Manager đã không gặp may. 

    Lấy mật khẩu chủ trong Kaspersky Password Manager
    Cuộc tấn công thứ hai cũng mang lại lợi thế cho công cụ hack của chúng tôi. Sau khi nhập dữ liệu mật khẩu chủ, có thể lấy được từng phần dữ liệu lưu trữ trên máy tính tại thời điểm xem hoặc chỉnh sửa chúng. 

    Đánh chặn dữ liệu lưu trữ trong Kaspersky Password Manager
    Ngoài ra, Kaspersky Password Manager cũng đã thất thủ trước cuộc tấn công thứ ba (DLL Hijacking). Khi bắt đầu, nó tải các thư viện bthprops.cpl. Thư viện này được đặt trong thư mục hệ thống và cần thiết để máy làm việc với các thiết bị hỗ trợ Bluetooth nhưng Kaspersky Password Manager lại cố gắng chạy nó mà không cần đến chỉ định đường dẫn đầy đủ và đó chính là lý do cho sự tồn tại của lỗ hổng này. Việc tải một thư viện khác có tên cryptsp.dll cũng diễn ra tương tự. Chỉ cần đặt một thư viện độc hại là đủ, thư viện này có thể chứa một Exploit cho hai vụ tấn công trước đó trong cùng thư mục với các ứng dụng và đổi tên nó thành bthprops.cpl. Sau đó, nó sẽ được nạp mỗi khi bạn khởi động Kaspersky Password Manager. 

    Kaspersky Password Manager mở trình Calculator cho mỗi lần khởi động
    Tóm lại, chúng ta có thể nói Kaspersky Password Manager có chất lượng thấp. Điểm số cho KPM là “Kém”.

    Sticky Password 7.0.2.27

    Ít người biết Sticky Password là cha đẻ của Kaspersky Password Manager. Trên cơ sở Sticky Password, Kaspersky Lab đã phát triển sản phẩm của mình. Cả hai chương trình quản lý đều có chức năng và cấu trúc tương tự. Trong thực tế, sự khác biệt chính giữa chúng là ở số phiên bản và thiết kế giao diện. Mặc dù phiên bản mới nhất của Sticky Password mới xuất hiện gần đây, chương trình này vẫn không thoát khỏi tất cả những vấn đề đã từng trao xảy ra với nó. Cuộc tấn công thứ nhất và thứ hai đã thành công, lấy được mật khẩu chủ và một phần nội dung của cơ sở dữ liệu mật khẩu.

    Lấy được mật khẩu chủ trong Sticky Password
    Giống như trường hợp với Kaspersky Password Manager, cuộc tấn công thứ ba cũng không có lợi cho Sticky Password: Chúng tôi đã xác định được một số lỗ hổng DLL Hijacking. Khi máy tính khởi động, ứng dụng cố gắng mở một số thư viện động từ danh mục riêng như fitlib.dll, olepro32.dll, profapi.dll. Nhận xét chung cho Sticky Password tương tự như với Kaspersky Password Manager. Điểm số cho Sticky Password là “Kém”.

    1Password 1.0.9.337

    1Password của công ty Agile Bits đã vượt qua cuộc tấn công thứ nhất. Người ta đã không dễ dàng để lấy được mật khẩu chủ như trong hai trường hợp trước. Ngoài ra, nó khiến người ta rất hài lòng với sự hiện diện của chức năng bảo vệ Mở khóa an toàn trên máy tính để bàn (Unlock on Secure Desktop), ngăn chặn tất cả các truy cập vào các ứng dụng tại thời điểm nhập mật khẩu. Thời điểm duy nhất để có thể có được mật khẩu chủ thông qua cuộc tấn công của chúng tôi là lúc vừa lập tức tạo cơ sở dữ liệu mật khẩu. Tuy nhiên, phương pháp này khó áp dụng trong thực tế, vì vậy chúng ta không xem xét kết quả của nó. Sau khi mở cơ sở để lưu trữ dữ liệu, người ta có thể thu được một phần khi chỉnh sửa hoặc xem cơ sở mật khẩu như trong các trường hợp trước.

     

    Đánh chặn dữ liệu lưu trữ trong 1Password
    1Password cũng không thoát khỏi DLL Hijacking. Sau khi mở cơ sở dữ liệu mật khẩu, ứng dụng đã cố tải một thư viện midimap.dll. Mặc dù có một số lỗ hổng bảo mật, với chức năng bảo vệ mật khẩu chủ, các nhận xét với 1Passwords có xu hướng trung lập. Điểm số cho 1Password là “Trung bình”.

    KeePass 2.23

    KeePass nổi tiếng đương đầu tốt với cuộc tấn công thứ nhất. Cũng giống 1Password, nó có chức năng kiểm soát truy cập vào các ứng dụng tại thời điểm nhập mật khẩu. Trước cuộc tấn công thứ hai, KeePass cũng đứng vững. Dữ liệu được ghi trong cơ sở dữ liệu chỉ có thể thu được tại thời điểm chỉnh sửa và mật khẩu đã lưu thì không mở được. Cuộc tấn công thứ ba cũng mang lại lợi thế cho chương trình quản lý mật khẩu mã nguồn mở.

    KeePass khóa chặn các truy cập trái phép
    Mặc dù Procmon cho thấy nó có nhiều nỗ lực để tải về một tập tin DLL không an toàn nhưng các tập tin đó không hoạt động, đánh giá cho chương trình quản lý mật khẩu của cộng đồng GNU này là tốt. Điểm số cho KeePass là “Tốt”.

    RoboForm 7.9.2.5

    RoboForm cũng không khuất phục trước cuộc tấn công thứ nhất. Nhưng ở cuộc tấn công thứ hai thì nó thất bại. Chỉ cần trong chế độ xem lại, đã có thể dễ dàng chiếm được gần như toàn bộ nội dung cơ sở dữ liệu mật khẩu.

    Đánh chặn dữ liệu lưu trữ trong RoboForm
    Như trong trường hợp trước, Procmon chỉ ra khả năng về mặt lý thuyết của DLL Hijacking với RoboForm. Tuy nhiên, nó đã thất bại khi cố tạo ra một Explore hoạt động. Do đó, RoboForm được cho là vượt qua cuộc tấn công thứ ba. Trên thực tế, điểm mà RoboForm thu được có thể ở giữa 1Password và KeePass. Tuy nhiên, điểm cuối cùng cho RoboForm sẽ là “Trung bình”.

    Tổng kết

    Trong năm chương trình quản lý mật khẩu hiện đại, chỉ có một trình quản lý mật khẩu KeePass là tốt, có thể chống lại tất cả ba cuộc tấn công. Mã nguồn mở và sự hỗ trợ tiếp tục của những người đam mê đã làm ra một sản phẩm thực sự tốt. Mặc dù RoboForm và 1Password không phải không có sai sót, nhưng cả hai đều bảo vệ được mật khẩu chính của bạn. Sticky Password và Kaspersky Password Manager không tự bảo vệ trước các cuộc tấn công lấy mật khẩu chủ. Ngoài ra, chúng cũng có lỗ hổng trước các hình thức tấn công DLL Hijacking nên việc sử dụng các chương trình quản lý mật khẩu dữ liệu trên ổ đĩa flash có thể được sử dụng bởi tin tặc để lây lan mã độc và là mục tiêu của một cuộc tấn công nội bộ. Những sản phẩm này đòi hỏi sự cải thiện thực sự về chất lượng an toàn. Tổng kết các kết quả của thử nghiệm không ưu tiên cho bất kỳ chương trình quản lý mật khẩu nào vì nó làm theo nhiều yếu tố chủ quan và cá nhân. Chúng tôi chỉ đơn giản là nhìn vào những chương trình quản lý mật khẩu liên quan đến an toàn của chúng.

    Mật khẩu và bảo mật đối với nhiều người có vẻ như đồng nghĩa. Nhưng khi gặp phải vấn đề về sự an toàn của chính các mật khẩu thì ngay lập tức vấn đề an toàn sẽ là ưu tiên hàng đầu. Các nhà cung cấp cạnh tranh bằng một loạt các giải pháp có độ tin cậy ở cái nhìn đầu tiên. Tuy nhiên, thuật toán mã hóa quản lý mật khẩu quân sự qua công bố và quảng cáo có thể lại ẩn chứa lỗi tổn thương tầm thường. Đừng hoảng sợ và rất khó để xác định rằng bạn không thể đặt tất cả trứng vào một giỏ, nhưng nếu tất cả chúng ta tụ tập để làm được điều này, trước tiên bạn cần phải kiểm tra đúng sự vững mạnh của giỏ của chúng ta.

    Theo xaker.ru (Hacker Nga)