Openstack sử dụng Horizon là project cho việc cung cấp Dashboard để người dùng đăng nhập và sử dụng các dịch vụ Openstack. Horizon là một ứng dụng nền web dựa trên Django. Horizon tương tác với Keystone nhằm xác thực thông qua username và password sau đó lấy token để làm việc với các project khác. Keystone sử dụng SQL làm cơ sở dữ liệu cho việc lưu trữ thông tin user. Một trong những m i nguy hiểm, an ninh liên quan đến SQL đó là Injection. K tấn công có thể lợi dụng l h ng bảo mật này để ch n các câu lệnh truy vấn nhằm đạt được bảng cơ sở liệu liệu và có các hành động bất hợp pháp như xóa dữ liệu, sửa đổi…
Mặc định Django sử dụng các Queryset cho phép m hóa dữ liệu đầu vào để ch ng sự tấn công SQL, tuy nhiên Django vẫn cho phép sử dụng các RawQuery và custom SQL có khả năng bị tấn công [17]. Horizon sử dụng forms.py cho việc xử lý xác thực người dùng với Keystone. Tùy vào các nhà phát triển sẽ ch n và sử dụng loại truy vấn nào.
/usr/lib/python2.7/dist-packages/openstack_auth/forms.py
Trong tệp cấu h nh forms.py các dữ liệu đầu vào đ được m hóa nhằm ch ng lại sự tấn công Injection.
Comment [SH6]: OK Giữ lại
45
region = forms.ChoiceField(label=_("Region"), required=False) username = forms.CharField(label=_("User Name"))
password = forms.CharField(label=_("Password"), widget=forms.PasswordInput(render_value=False))
def __init__(self, *args, **kwargs):
super(Login, self).__init__(*args, **kwargs)
self.fields.keyOrder = ['username', 'password', 'region']
Nhìn vào mã code ta thấy tất cả các thông tin đầu vào usename, password và domain đ được tổng hợp dưới dạng self.fields.keyOrder nhằm tránh các câu lệnh
truy vấn luôn trở lên đ ng.
Tiếp theo sử dụng một công cụ kiểm tra các m i an ninh cho một ứng dụng web bao gồm cả m i nguy cơ Injection là SQLmap [18] – Hình 26
Hình 26 Phần mềm SQLMap
Tiến hành chạy để kiểm tra m i an ninh với địa ch của Horizon là
46
Hình 27 Kết quả kiểm tra Injection
Với kết quả trên hình 27 th không có bất kỳ l hổng bảo mật nào liên quan đến Injection. Horizon đ vượt quá các bài kiểm tra và l h ng này. Qua đó cho thấy được Horizon dựa trên Django đ có các cách truy vấn Query rất t t để phòng ch ng tấn công dạng này. Tuy nhiên do Django vẫn h trợ các kiểu truy vấn sơ khai như Rawquery. Các nhà quản trị nếu không có sự nghiên cứu mà sử dụng kiểu truy vấn này cho Django sẽ dẫn đến việc giảm sự bảo vệ trước nguy cơ tấn công Injection và là l hổng cho việc tấn công. Do Django là m nguồn mở, không nằm dưới sự quản lý của Openstack nên rất khó để Django khóa chức năng này lại. Do đó việc quan tr ng nhất chính là các nhà quản trị nên lưu ý vấn đề này.