3.2 Phân tích các vấn đề an ninh trong Openstack và đưa ra giải pháp,
3.2.1 Tấn công Injection
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.
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.