This page is READ-ONLY. It is generated from the old site.
All timestamps are relative to 2013 (when this page is generated).
If you are looking for TeX support, please go to VietTUG.org

shc: lộ hàng rồi!

:(
Added by almost 3 years ago  »  Votes: 1/1

shc là một công cụ nhỏ để mã các kịch bản viết bằng Bash hay Bourne. Nếu test.sh là kịch bản gốc của bạn, thì sau khi mã hóa

$ shc -f test.sh

một chương trình test.sh.x.c theo ngôn ngữ C được sinh ra, và chương trình này sẽ được biên dịch thành mã máy test.sh.x. Bây giờ, thay vì phân phối kịch bản test.sh, bạn chỉ việc phân phối test.sh.x là xong: Người dùng sẽ không đọc được mã nguồn và các thông tin nhạy cảm bạn muốn bảo vệ.

Điều phiền toái duy nhất, là kiến trúc hệ thống nơi sử dụng test.sh.x phải tương đồng với kiến trúc máy sử dụng để chạy lệnh shc -f test.sh ở trên (ngay cả khi bạn sử dụng cờ -static khi mã hóa.) Nếu hệ thống nâng cấp, cập nhật, có nhiều khả năng bạn phải mã hóa và phân phối lại tập tin nhị phân.

Nhưng... lộ hàng rồi!

Nếu một kịch bản có thời gian thi hành kéo dài, hầu như toàn bộ nội dung của nó bị lộ thông qua lệnh ps xauww. Ví dụ, với kịch bản

1 #!/bin/sh
2 
3 echo "This is a test" 
4 sleep 100
5 echo "This is a test" 

được mã hóa thành test.sh.x, thì khi thi hành test.sh.x, trong kết quả của ps xauww bạn thấy

pi   27630  0.0  0.1  3624  1784   3  S+    1:43PM   0:00.01 ./test.sh.x -c [snip]
#!/bin/sh\n\necho "This is a test"\nsleep 100\necho "This is a test"\n\n ./test.sh.x (sh)

Trên một số hệ thống Linux, kết quả có thể khác chút ít: thay cho ký tự thoát \n là dấu hỏi ?, nhưng sự khác biệt này không ảnh hưởng nhiều tới việc phục hồi lại toàn bộ mã nguồn của kịch bản :) Việc này rõ ràng không nằm ngoài tầm tay của một người dùng Linux trung bình.

Goodbye ... shc :)

Ref.: http://www.datsi.fi.upm.es/~frosal/sources/shc.html


Comments

Added by bronzeboyvn almost 3 years ago

đã là script thì ai lại đi "giấu hàng".

Added by almost 3 years ago

Đôi khi cũng phải che đi để tránh mấy ánh mắt tò mò, tọc mạch :)

  1. che mật khẩu
  2. che các thủ tục khởi động
  3. che các hàm hay thuật toán đặc biệt
  4. đảm bảo kịch bản không bị ghi hay thay đổi ngoài ý muốn

Added by bronzeboyvn almost 3 years ago

thay vì phải che mật khẩu, ta bắt người dùng nhập account từ bàn phím:

1 ..
2 read -e -p "username: " USER
3 read -es -p "password for user $USER: " PASSWORD
4 PASSWORD=$(printf '%q' $PASSWORD)
5 ..

Added by whatvn [G] almost 3 years ago

Vấn đề về password thì có thể mã hoá trước khi cho vào script không :-/
Còn về việc script bị show ra trong lúc thực thi vơi ps, đối với script khá đồ sộ với nhiều hàm nhiều biến thì nó show thế nào nhỉ? Vì không phải nó thực thi một lúc mà thực thi theo lệnh gọi hàm, lúc đó cũng khó mà lấy hết toàn bộ được.
Chưa dùng nó (shc) lần nào.

Added by almost 3 years ago

  1. Nếu kịch bản được mã hóa toàn bộ, thì có thể hy vọng password không bị thấy. Tất nhiên, cách làm này rất là khù khờ, chỉ để che mắt người dùng bình thường thôi
  2. Đối với kịch bản đồ sộ: lúc đầu mình cũng nghĩ như Hưng. Sau thì phát hiện ra là toàn bộ kịch bản lộ hết. Để lấy được kết quả thì chỉ việc ps xauww > foobar.txt là gom hàng thôi

Chưa nói tới ý nghĩa của việc dùng shc... Việc một kịch bản mã hóa như shc bi lộ hàng cũng là điều mà chắc chính tác giả của nó cũng không ngờ tới :) Mình đã gửi email liên hệ nhưng chưa thấy hồi âm, ráng đợi vài bữa nữa :P

Added by almost 3 years ago

Câu trả lời của tác giả (cho một người khác; thư này được trích lại cho mình)

Yes I knew that issue.

In earlier versions of Linux, which a maximun amount of informacion being shown througt /proc/xxx/cmdline (4096), it was fixed inserting spaces. (Look in shc.c a line as: memset(scrpt, (int) ' ', hide_z); )

It has changed with new Linux versions and now is an unfixable problem.

I've basically abandoned further developement of shc.

The way to go for a equivalent tool in nowadays GNU/Linux systems would be using fexecve system call, but the probes I did show some other problems.