banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Messages posted by: vd_  XML
Profile for vd_ Messages posted by vd_ [ number of posts not being displayed on this page: 0 ]
 
OSSEC (ossec.net) là một hệ thống khá hiệu quả để phát hiện và phòng chống thâm nhập. Tui tóm tắt 1 cách sử dụng hơi khác với cách cài đặt truyền thống như sau:

Case:
- Máy windows có chạy 1 ứng dụng. Mục tiêu là cần phải theo dõi service đó coi có đang chạy hay không.
- Phân tích: ứng dụng chạy thì sẽ phải ghi dữ liệu. Do vậy có thể viết script để theo dõi coi ứng dụng có mở file ra để ghi dữ liệu vào hay không -> cần có:
+ handle.exe trong bộ Sysinternals để in ra các file mà 1 process mở (tương ứng trong Linux là lsof)
+ .cmd (.bat) để chạy handle và lọc in ra thông tin
+ ossec agent chạy tại máy để gửi về ossec server phân tích thông tin và xử lý (gửi mail hoặc active response)

- Cấu hình:
+ File path_to_cmd_file:
c:\sysinternals\handle.exe -p processname filename | find /c "type: File"

Ý nghĩa: đếm số filename do processname mở. Các bạn có thể thêm prefix/suffix để matching trong rule 100002 bên dưới dễ dàng.

+ Ossec agent ossec.conf, phần <ossec_config>, thêm vào bên trong:
<localfile>
<log_format>full_command</log_format>
<command>path_to_cmd_file</command>
<alias>files_check</alias>
<frequency>900</frequency>
</localfile>

Ý nghĩa: ossec agent sẽ chạy path_to_cmd_file, output của path_to_cmd_file sẽ được gửi về OSSEC server phân tích và xử lý. 900 giây sẽ chạy 1 lần. Mỗi lần report kết quả về sẽ có prefix là "ossec: output: 'files_check'"

+ Ossec server rules/local_rules.xml
<rule id="100001" level="1">
<if_sid>530</if_sid>
<match>ossec: output: 'files_check</match>
<description>File event</description>
</rule>
<rule id="100002" level="12" ignore="900">
<if_sid>100001</if_sid>
<regex>output_of_cmd_file</regex>
<description>Description</description>
<options>alert_by_email</options>
</rule>

Ý nghĩa: sau khi agent chạy full_command 'files_check' (rule 100001 sẽ match sau rule 530), nếu kết quả có string 'output_of_cmd_file' thì phát sinh event 100002 và gửi mail

+ Ossec server ossec.conf, bên trong <ossec_config>, thêm:
<email_alerts>
<email_to>emails</email_to>
<rule_id>100002</rule_id>
<do_not_delay/>
<do_not_group/>
</email_alerts>

Ý nghĩa: nếu rule 100002 thì gửi mail ngay lập tức đến emails

Bắt được event 100002 trên Ossec server thì tùy nghi bạn xử lý.

Lưu ý:
+ Phải dùng psexec để chạy handle.exe với quyền system trước khi gắn vào ossec, tại vì sysinternals có màn hình accept end user agreement.
+ Localfile dùng full_command PHẢI ĐƯỢC để trong ossec.conf của agent, không phải ở ossec.conf của server
Dùng OSSEC thì có nhiều cách để xử lý:
- Active response script của OSSEC để chạy 1 command khi rule match. Bạn xem ví dụ về active response trên trang OSSEC
- Xử lý mail report của OSSEC: trên mail server khi nhận ossec mail thì sẽ chạy script tương ứng.
@ngtrongtri:

Bạn không sử dụng sticky session (worker.loadbalancer.sticky_session=False) vì thế nên request đến mod_jk sẽ được phân tải về các tomcat worker "ngẫu nhiên"

Bạn sử dụng sticky session thì request/response từ worker nào sẽ được gửi về lại worker đó -> không bị tình trạng mất session hoặc không đồng bộ.

Chỉ khi nào mở session mới thì mod_jk mới phân tài về worker "ngẫu nhiên".
1. Bạn dùng cookies view trên browser để xem cái JSESSIONID của bạn có đính kèm worker1 hoặc worker2 không?
2. Bạn có load module mod_proxy_ajp không?
3. Balancer-manager chỉ chạy được nếu apache bạn load module mod_status và mod_proxy, mod_proxy_balancer?
1. Có
2. Có
bạn đọc thêm:

https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Cluster_Administration/


sticky session bạn xử lý ở backend hay ở đâu? tức là chỗ nào đánh dấu là các request & respond này là của tui chứ không phải của hàng xóm?
bạn nên chia sẻ thêm là bạn giải quyết như thế nào, các bạn khác cũng như tôi sẽ học hỏi được thêm các case để xử lý.
- khi vào 2 site bằng browser thì hiện ra cái gì?
- dns đã trỏ abc.com.vn và def.com.vn vào 192.168.1.2 chưa?
kill -HUP `pidof nginx` sẽ reload nginx config mà không cần restart
1. Thông báo lỗi của nginx là gì?
2. Bạn dùng upstream server1 {... } & upstream server2 {... } rồi reference đến server1 và server2 trong proxy_pass thay vì dùng full domain như hiện tại. Theo tui đoán thì khi bạn dùng proxy_pass http://def.com.vn; thì nginx không biết bạn muốn pass đến server def.com.vn thực tế hay phần upstream def.com.vn trước đó.
một khía cạnh khác là cty phải làm cho anh A và mọi người biết anh ta sẽ bị trừng phạt thế nào khi lộ ( Snowden smilie ). Toàn bộ quá trình của anh A lấy tài liệu như bạn mô tả đều lưu vết lại.

Mọi giải pháp kỹ thuật chỉ có tác dụng tương đối .
làm account sms chẳng hạn -> cc hoặc bcc đến account đó sẽ phát sinh log -> parse log để gửi sms
SElinux & auditd
Việc mua chứng chỉ là để có bên thứ 3 xác nhận bạn là ai trong thực tế.
Tuỳ theo tên miền mà route traffic, như vậy việc quyết định route traffic là ở lớp application -> iptable không thể dùng được, phải dùng reverse proxy.

Squid có thể đươc, tuy không chuyên.

Thường người ta sẽ dùng nginx, mod_proxy, haproxy, varnish v.v... để làm việc này.
- Chỗ nào thấy traffic đến 5 server thì chỗ đó phát hiện được.
- Chỗ nào traffic phải đi qua trước khi đến server thì chỗ đó chặn được.
- snort có mode inline
Graylog2 dùng làm log analysis rất khá. Tuy nhiên cài đặt mặc định không parse được các mẫu log thông dụng như access_log của apache httpd, modsecurity core rule set, Cisco ASA.

Gửi kèm đây là một số drool rule (xem graylog2-server.conf, phần rewrite log message) để tách field cho các mẫu log thông dụng.

Lưu ý các bạn sử dụng rule nhớ chỉnh lại facility cho đúng với cấu hình syslog thực tế.

Trang web http://www.regexplanet.com/advanced/java/index.html sẽ cực kỳ hữu ích cho các bạn viết regular expression tách field giống tui.

Code:
import org.graylog2.plugin.logmessage.LogMessage
import java.util.regex.Matcher
import java.util.regex.Pattern
rule "ModSecurity Logging to GELF"
// sample log line httpd: [error] [client a.b.c.d] ModSecurity: Warning. Operator LT matched 5 at TX:inbound_anomaly_score. [file "modsecurity_crs_60_correlation.conf"] [line "33"] [id "981203"] [msg "Inbound Anomaly Score (Total Inbound Score: 2, SQLi=, XSS=): Request Missing an Accept Header"] [hostname "www"] [uri "/index.php"] [unique_id "UUl6i38AAA"]
when
m : LogMessage( facility == "local6", shortMessage matches "(?s).*ModSecurity:.*" )
then
Matcher matcher = Pattern.compile("\\[client (\\d+.\\d+.\\d+.\\d+)\\] .*?\\[id \"(.*?)\"\\] .*?\\[msg \"(.*?)\"\\]").matcher(m.getShortMessage());
if (matcher.find()) {
m.addAdditionalData("_SRC",matcher.group(1));
m.addAdditionalData("_modsec_id",matcher.group(2));
m.addAdditionalData("_modsec_msg",matcher.group(3));
}
end
rule "Parsing Snort to GELF"
//sample log line snort: [1:2402000:2907] ET DROP Dshield Block Listed Source [Classification: Misc Attack] [Priority: 2]: {TCP} a.b.c.d:24495 -> a.b.c.d:8081
when
m : LogMessage( facility == "local5" )
then
Matcher matcher = Pattern.compile("snort: +\\[(\\d+:\\d+:\\d+)\\] (.*?) \\[Classification:.*?\\] \\[Priority:.*?\\]: \\{(.*?)\\} (\\d+.\\d+.\\d+.\\d+):?(\\d*) -> (\\d+.\\d+.\\d+.\\d+):?(\\d*)").matcher(m.getShortMessage());
if (matcher.find()) {
m.addAdditionalData("_snort_id",matcher.group(1));
m.addAdditionalData("_snort_msg",matcher.group(2));
m.addAdditionalData("_PROTO",matcher.group(3));
m.addAdditionalData("_SRC",matcher.group(4));
m.addAdditionalData("_SPT",matcher.group(5));
m.addAdditionalData("_DST",matcher.group(6));
m.addAdditionalData("_DPT",matcher.group(7));
}
end
rule "Parsing access_log to GELF"
// sample log line httpd: a.b.c.d - - [21/Mar/2013:15:36:15 +0700] "GET /a/b.css.jsf?ln=primefaces-aristo HTTP/1.0" 304 - "http://www/index.jsf" "Mozilla/5.0 (Windows NT 5.1)" 1203 287
when
m : LogMessage( facility == "local4" )
then
Matcher matcher = Pattern.compile("httpd: +(\\d+.\\d+.\\d+.\\d+) .*?\"([A-Z]+) ([^\"]+) HTTP..?.?.?\" (\\d+) ([0-9-]+) \\\"([^\"]+)\\\" \\\"([^\"]+)\\\"").matcher(m.getShortMessage());
if (matcher.find()) {
m.addAdditionalData("_SRC",matcher.group(1));
m.addAdditionalData("_verb",matcher.group(2));
m.addAdditionalData("_request",matcher.group(3));
m.addAdditionalData("_status",matcher.group(4));
m.addAdditionalData("_referer",matcher.group(6));
m.addAdditionalData("_ua",matcher.group(7));
}
end
rule "Parsing core switch"
// sample log line 321533: Jun 26 08:11:17.164: %SEC-6-IPACCESSLOGP: list ACL1 denied udp a.b.c.d(6387) (TenGigabitEthernet1/1 x.y.z) -> a.b.c.d(137), 1 packet
when
m : LogMessage( shortMessage matches "(?s).*%SEC-6-IPACCESSLOGP.*" && facility == "local7" )
then
Matcher matcher = Pattern.compile("%SEC-6-IPACCESSLOGP: +list +([A-Za-z0-9\\-]+) +([a-zA-Z0-9]+) +([a-z]+) +(\\d+.\\d+.\\d+.\\d+)\\((\\d+)\\) +\\(([A-Za-z0-9/]+) +([0-9a-z\\.]*)\\) +-> +(\\d+.\\d+.\\d+.\\d+)\\((\\d+)\\), +(\\d+)").matcher(m.getShortMessage());
if (matcher.find()) {
m.addAdditionalData("_ACL",matcher.group(1));
m.addAdditionalData("_PERM",matcher.group(2));
m.addAdditionalData("_PROTO",matcher.group(3));
m.addAdditionalData("_SRC",matcher.group(4));
m.addAdditionalData("_SPT",matcher.group(5));
m.addAdditionalData("_INT",matcher.group(6));
m.addAdditionalData("_MAC",matcher.group(7));
m.addAdditionalData("_DST",matcher.group(8));
m.addAdditionalData("_DPT",matcher.group(9));
m.addAdditionalData("_COUNT",matcher.group(10));
}
end
rule "Parsing ASA log 106023 to GELF"
// sample SA-4-106023: Deny tcp src XXX:a.b.c.d/41258 dst YYY:a.b.c.d/1051 by access-group "XXXX"
when
m : LogMessage( facility == "local4" && shortMessage matches "(?s).*%ASA-[0-9]-106023:.*" )
then
#System.out.println("[m]"+m.getShortMessage()+"[/m]");
Matcher matcher = Pattern.compile("%ASA-([0-9])-([0-9]+): +Deny +([A-Za-z ]+) +src +([A-Za-z_0-9-]+):(\\d+\\.\\d+\\.\\d+\\.\\d+)/(\\d+) [A-Za-z ]+ ([A-Za-z_0-9-]+):(\\d+\\.\\d+\\.\\d+\\.\\d+)/(\\d+) by access-group \"([A-Za-z_0-9-]+)\"").matcher(m.getShortMessage());
if (matcher.find()) {
m.addAdditionalData("_LVL",matcher.group(1));
m.addAdditionalData("_MSGID",matcher.group(2));
m.addAdditionalData("_PROTO",matcher.group(3));
m.addAdditionalData("_SNAME",matcher.group(4));
m.addAdditionalData("_SRC",matcher.group(5));
m.addAdditionalData("_SPT",matcher.group(6));
m.addAdditionalData("_DNAME",matcher.group(7));
m.addAdditionalData("_DST",matcher.group(8));
m.addAdditionalData("_DPT",matcher.group(9));
m.addAdditionalData("_ACL",matcher.group(10));
}
end
rule "Parsing other ASA log to GELF"
when
m : LogMessage( facility == "local4" && shortMessage not matches "(?s)%ASA-[0-9]-(106023):.*" )
then
Matcher matcher = Pattern.compile("%ASA-([0-9])-([0-9]+): (.*)").matcher(m.getShortMessage());
if (matcher.find()) {
m.addAdditionalData("_LVL",matcher.group(1));
m.addAdditionalData("_MSGID",matcher.group(2));
m.addAdditionalData("_MSG",matcher.group(3));
}
end

thay vì ^M thì có thể dùng \r
- IPS chạy ở chỗ nào bắt được traffic. Bạn phải sử dụng các kỹ thuật port mirror, network tap v.v.. hoặc đặt ips ở chỗ nào nhòm được dữ liệu vào/ra mạng.

- IDS đặt ở chỗ nào chặn được luồng dữ liệu.

- snort có thể làm IPS nếu sử dụng mode inline, tức là snort sẽ dùng 1 đôi port mạng, 1 cho luồng dữ liệu vào, 1 để đưa dữ liệu ra.

- snort kết hợp với các tool khác để làm IPS theo mô hình snort phát hiện -> ghi log -> 1 process khác đọc log rồi chạy script/program để cập nhật firewall rule.

Các câu hỏi của bạn còn rộng và chung chung quá nên cũng khó cho anh em.
SSL gắn liền với domain. Bao nhiêu IP gắn với cái domain đó thì sẽ tương ứng bao nhiêu server có priv key tương ứng với cert của domain đó.
@hackerkey
Bạn thử suy nghĩ ngược lại, tại sao bạn không GIẢ làm apple server để lừa cái iphone smilie
còn thiếu cái này trong conf của apache nữa

LogFormat "%{X-Real-IP}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

hoặc

LogFormat "%{X-Real-IP}i %l %u %t \"%r\" %>s %b" common


rpaf & x_forward_for chỉ mới add vào http header, còn bạn gì đó hỏi là log
wtf? bạn tìm hiểu kỹ thêm về NAT, về tcp/ip stack, về cách iptable xử lý các packet trước đã
drop source chứ đâu có drop 1.1.1.1 đâu mà bạn lo

bạn đã dựng vm và test thử lý thuyết của bạn chưa?
Làm ơn làm theo quanta trước rồi hãy hỏi
(keyword tiếng việt: Biểu thức chính quy)
- chạy barnyard2 với thông số -v, đồng thời bật output fast trong barnyard2 để coi nó có output fast không.

- Đọc thêm /var/log/message (hoặc /var/log/syslog) coi coi barnyard2 có phun log ra không?

- Version của barnyard2 là gì?
1. thư mục /var/log/snort có file unified2 nào không? => đảm bảo snort đã capture được
2. file waldo là barnyard2.waldo hay là barnyard2waldo?
gửi config của barnyard2 lên cho mọi người xem và góp ý đi bạn
barnyard2 đã đưa được vào mysql chưa?
snort -> unified2 -> barnyard2 -> mysql
BASE chỉ đọc từ mysql nên bạn phải chắc barnyard2 đã out ra được mysql
vagrant
 
Go to Page:  2 3 4 Page 5 Last Page

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|