á¡á¬ážáá¯á¶ážáááºá¹ááá¬áá«á áá»áœááºá¯ááºááá¯á·ááẠáááºááŒáœá
áœá¬áá¯ááºáá±á¬ááºáá±ááŒá®áž áááºááá«áá®ááœáẠá¡á¬ážáá±á¬ááºážááá·áº ááœáŸááºáááºááŸá¯áá»á¬ážááᯠááŒááºáááºáá±ááŒá®ááŒá
áºáááºá á¡ááŒá¬ážáá°áá»á¬ážááŒá¬ážááœááºá áá°ááá¯ááºážáá¡ááŒáá¯ááºáá¯á¶ážáááºáááºážá¡áá
áºá¡ááœáẠá
á¬áááºážááœááºážááŒááºážááᯠááŒá±ááŒá¬áá¬ážáááºá
ááá¯ááºááœáá·áºááŒá¯áá»ááºáá»á¬ážááẠSUID á á®áá¶áá¯ááºáá±á¬ááºááá¯ááºáá±á¬ áá¯á¶ááŒá¯á¶áá±á¬á¡ááŒá¬ážááœá±ážáá»ááºá áá¬ááᯠáá±ážá áœááºážáá±á¬áºáááºáž á¡á ááá¯ááºážááœáẠá¡áááºážáááºááŸá¯ááºááœá±ážáá¯á¶ááááºá
ááœáááááºááá¯áᬠáá«ááá¯á·á¡á¬ážáá¯á¶ážáááááºá
á¡áááºáá±á¬áºááŒáá« áá±á¬ááºážáá«ážááᯠá¡áá±ážá
áááºáááºááŸá¯ááŒááºážá០ááŸá±á¬ááºááŒááºááá¯áá«á á¡áá»áááºá¡áááºážááẠáááºáá¬á
á±áá«áááº- á¡ááŒá±áá¶á¡á¬ážááŒáá·áºá ááá¯ááºááœáá·áºááŒá¯áá»ááºáá»á¬ážááẠroot á¡ááŒá
Ạáá¯ááºáá±á¬ááºááá·áº áá¯ááºáááºážá
ááºáá»á¬ážááᯠááœáá·áºááŒá¯áá¬ážááŒá®áž á¡áá»áá¯á·áá±á¬ á
áœááºážáááºáá»á¬ážááᯠááááºážááááºážáá¬ážááẠááá·áºáááºáá»ááºáá
áºáá¯áᯠááŒá¯áá¯ááºááẠááœáá·áºááŒá¯áá¬ážáááºá
Permissions áá»á¬ážááẠáá¯á¶ááŸááºá¡á¬ážááŒáá·áº root á¡ááŒá
Ạá¡ááŒá²áááºáááºáá±ááá·áº áááºáá±á¬ááºááŸá¯áá»á¬ážá¡ááœáẠáá±á¬ááºážááœááºáá±á¬áºáááºáž command line utilities áá»á¬ážáá±á¬á áá¶áá±á¬ááºážá
áœá¬ááŒáá·áºá ááá·áºááœáẠááŸááºáááºáá±á¬ utilities áá»á¬áž ááá·áºááœááºážáá¬ážáá±á¬ááŒá±á¬áá·áº áááºážááá¯áááºáž áá¶á·ááá¯ážáá±ážáá¬ážáá«áááºá á¡áááºá áááºááẠUbuntu ááá¯á¡áá¯á¶ážááŒá¯áá±áá«áá á¥ááá¬á¡á¬ážááŒáá·áº áááºááẠpackage ááá¯ááá¯á¡ááºáááá·áºáááºá libcap2-bin
. áááºááẠááŸá±ážáá±á¬ááºážááá¯ááºáá±á¬ kernel (áá¬ážááŸááºážááŸááŒá
áºáááºá 2.6.24).
á€áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááẠááœáá·áºááŒá¯áá»ááºáá»á¬ážááᯠSUID áá
áºáááºáááºááŸáá·áºáááºáá°áááºá ááá¯á·áá±á¬áº áááºáááºááŸááºááŸááºááœáá·áºááŒá¯áá»ááºá¡ááœá²á¡ááœááºáᬠááœáá·áºááŒá¯áá»ááºáá»á¬ážááᯠááœáá·áºááŒá¯áááºá ááŸáááŸá¬áá±á«á·á setcap
ááá¯ááºáá
áºáá¯á០ááœáá·áºááŒá¯áá»ááºáá»á¬ážááᯠááá·áºáááºááŸáá·áº áááºááŸá¬ážááẠá¡áá¯á¶ážááŒá¯áááºá
áááá¡ááá·áºááŸá¬ áááºááá¯á¡ááºáá±á¬ ááœáá·áºááŒá¯áá»ááºáá»á¬ážááᯠááœá±ážáá»ááºáááºááŒá
áºáááºá á€áá±á¬ááºážáá«ážá¡ááœááºááŒá±á¬áá·áºá áá¯áá±á«áºáá±á¬ network diagnostic tool áá
áºáá¯ááŸááá±áááºáᯠáá»áœááºáá±á¬áºáá°ááá«áááºá tracewalk
á¡áá¯á¶ážááŒá¯ááá¯ááºááááºá CAP_NET_RAW
.
áááºááẠbinary áááºááŸááᬠáááºážááŒá±á¬ááºážááœáẠááŸááá±áááºáᯠáá°ááá«á tracewalk
á€ááœáá·áºááŒá¯áá»ááºááᯠá€áá²á·ááá¯á· ááá·áºááá¯ááºáááºá
sudo setcap cap_net_raw=eip tracewalk
áá±á¬áá±á¬ááẠáá±á¬ááºáááºááœá²ááᯠáá
áºáá»á°ááŸá¯áá«á =eip
ááŒááºáááºááŒááºáá¬ážááŸá¯á¡ááœááºá áá« á¡á²áá«ááᯠá
áá¹ááá·áºá¡áááºážáááºá¡ááœááºáž ááŒá±á¬ááŒáááºá ááœáá·áºááŒá¯áá»ááºá¡áááºááẠá
á¬áá¯á¶ážáá±ážááŒáá·áº áááááŒá¯áá«á ááá·áºááœáẠááœáá·áºááŒá¯áá»ááºáá»á¬ážááᯠááŸááºáááºá
áœá¬ ááŒááºáááºáá¬ážááŒááºáž ááŸáá áááŸá á
á
áºáá±ážááá¯ááºáááº-
setcap -v cap_new_raw=eip tracewalk
ááá¯á·ááá¯áẠáá±ážáá¬ážáá±á¬ á á®áá¶áá±á¬ááºááœááºááŸá¯á¡ááœáẠáááºááŸááºááœáá·áºááŒá¯áá»ááºá¡á¬ážáá¯á¶ážááᯠáááºá á¬áááºážááŒá¯á á¯ááá¯ááºáááº-
getcap tracewalk
á¡ááá¯ážá¡áá¬ážá¡ááœááºá áááºáá¯ááºáá±á¬ááºááá¯ááºáá±á¬ ááœáá·áºááŒá¯áá»ááºá¡á¬ážáá¯á¶ážááᯠáááºááŸá¬ážááá¯ááºáááº-
setcap -r tracewalk
á€á¡áá»áááºááœááºá áááºááẠá¡ááœáá·áºáá°ážáááá±ážáá±á¬á¡áá¯á¶ážááŒá¯áá°á¡ááŒá Ạexecutable ááᯠrun ááá¯ááºááá·áºááŒá®áž áááºážááẠá¡ááŒááºáž sockets áá»á¬ážááŸáá·áºá¡áá¯ááºáá¯ááºááá¯ááºááá·áºáááºá ááá¯á·áá±á¬áº root á¡áá¯á¶ážááŒá¯áá°ááœááºááŸááá±á¬á¡ááŒá¬ážá¡ááœáá·áºáá°ážáá»á¬ážáááŸááá«á
áá«ááᯠáá®áá°ážáááºážáá²á· áá±á¬ááºáááºááœá²á áá¬ááá¯ááá¯ááá¯áá¬áá²á =eip
? áááºážááẠááœáá·áºááŒá¯áá»ááºá ááá±á¬ááá¬áááᯠáá¬ážáááºááŸá¯á¡áá»áá¯á· ááá¯á¡ááºáááºá áá¯ááºáááºážá
ááºáá
áºáá¯á
á®ááœáẠááœáá·áºááŒá¯áá»ááºáá¯á¶ážá
á¯á¶ááŸááááºá áááá±á¬ááºááŸá¯á á¡ááœá±áááºáá¶ááŸá¯ááŸáá·áº ááœáá·áºááŒá¯áá¬ážáááºá:
- áááá±á¬ááºáááºá ááœáá·áºááŒá¯áá»ááºáá»á¬ážááẠáá¯ááºáááºážá
ááºáá
áºáᯠá¡ááŸááºááááºáá¯ááºáá±á¬ááºááá¯ááºááá·áºá¡áá¬ááᯠáááºááŸááºáá±ážááá·áºá¡áá¬áá»á¬ážááŒá
áºáááºá á¥ááá¬á¡á¬ážááŒáá·áºá á¡áááºá áááºážááẠá¡ááŒááºážáááºáá»á¬ážááᯠááá¯ááºááœááºááŒá±ááŸááºážááẠáááŒá
áºááá¯ááºáá«á
CAP_NET_RAW
áááá±á¬ááºáá±á¬ áááºááŸááºáá»ááºááœáẠáááŸááá«á - áááŸáááá¯ááºáá«áááºá ááœáá·áºááŒá¯áá»ááºáá»á¬ážááẠááá·áºáá»á±á¬áºáá±á¬áá±á«áºááá¯ááŸá¯ááᯠá¡áá¯á¶ážááŒá¯á áááºážááá¯á·á¡á¬áž áá±á¬ááºážááá¯áá«á áá¯ááºáááºážá ááºáá áºáá¯á០ááœáá·áºááŒá¯áá±ážááá·áºá¡áá¬áá»á¬ážááŒá áºáááºá ááœáá·áºááŒá¯áá»ááºááá±á¬ááºážáá¶áá² áá¯ááºáááºážá ááºááᯠá¡ááá¡áá» áá±ážááá¬ážáá«á áááºážááá¯á·ááẠáááºááá·áºá¡áá¬ááá¯áá»áŸ á¡ááŸááºááááºáá¯ááºáá±á¬ááºááŒááºážá០áá¬ážáá®ážááááºáááºáá¬ážáááºá áááºážááẠá¡ááŸááºááááºááá¯á¡ááºááá·áºáá¬áá¡ááœááºáᬠáááá±á¬ááºáá±á¬áááºááŸááºáá¬ážáá±á¬ á¡áá±ážááŒá®ážáá±á¬ááœáá·áºááŒá¯áá»ááºáá»á¬ážááᯠááá·áºááœááºážáááºá¡ááœáẠáá¯ááºáááºážá ááºáá»á¬ážááᯠáá±ážáá¬ážááá¯ááºá á±áá«áááºá
- á¡ááœá±áᶠááœáá·áºááŒá¯áá»ááºáá»á¬ážááẠááœá±ážááœá¬ážáá¬áá±á¬ ááá±ážáá¯ááºáááºážá
ááºá áááºááŸááºážáá®ááá¯ááºáá±á¬ á¡á
á¯á¡áá±ážááœáẠá¡ááœá±áááºáá¶ááá¯ááºáá±á¬ á¡áá¬áá»á¬ážááŒá
áºáááºá ááœá²á
áááºáá±á
ááº
fork()
ááá¯á·ááá¯ááºclone()
ááá±ážáá¯ááºáááºážá ááºááẠáá áºáá»áááºáááºážááœáẠáá°áá®áá±á¬áá¯ááºáá±á¬ááºááŸá¯á¡ááŒá Ạáá¯ááºáá±á¬ááºááá¯ááºáá²ááŒá áºáá±á¬ááŒá±á¬áá·áº ááááá¯ááºáááºážá ááºáááœáá·áºááŒá¯áá»ááºáá»á¬áž áááá¹áá°ááᯠá¡ááŒá²áá±ážáá¬ážáááºá á¡ááœá±áááºáá¶ááá¯ááºáá±á¬ á¡á á¯á¶ááᯠáááºááá·áºá¡áá»áááºááœáẠá¡áá¯á¶ážááŒá¯áááºáexec()
(ááá¯á·ááá¯áẠáá®áá»áŸáááº) ááᯠexecutable file ááŸáá·áº á¡á á¬ážááá¯ážááẠáá±á«áºáááºá á€á¡áá»áááºááœááºá áá¯ááºáááºážá ááºá¡áá áºá¡ááœáẠá¡áá¯á¶ážááŒá¯ááá·áº áááºááŸááºážáá®áá±á¬á¡á á¯á¶ááá¯ááá°ááẠáá¯ááºáááºážá ááºááááŸáááá¯ááºáá±á¬á¡á á¯á¶ááᯠá¡ááœá±áááºáá¶ááá¯ááºáá±á¬á¡á á¯á¶ááŒáá·áº áá¯á¶ážááœááºáá¬ážáááºá
á¡á²áá®áá±á¬á· ááŸáááŸá¬áá±á«á·á setcap
áá±ážáá¬ážáá±á¬ executable áá
áºáá¯á¡ááœáẠဠsets áá¯á¶ážáá¯á ááœáá·áºááŒá¯áá»ááºáá»á¬ážááᯠááœááºáááºá
áœá¬ ááá·áºááá¯ááºá
á±áá«áááºá á¡ááœá²á·áá»á¬ážá á¡áááá¹áá«ááºááŸá¬ ááá¯ááºááœáá·áºááŒá¯áá»ááºá¡ááœáẠá¡áááºážááẠááœá²ááŒá¬ážááŒá±á¬ááºáž áááááŒá¯áá«á
- áááŸáááá¯áẠááá¯ááºááœáá·áºááŒá¯áá»ááºáá»á¬ážááẠáááºážááá¯áá±á«áºáá±á¬ áááºááá¯ááºáááºážá ááºááœáẠáááºážááá¯á·ááá«áááºáá²á·áá»áŸááºááẠexecutable file áá áºáá¯ááœáẠá¡ááŒá²áááºážáááŸáááá¯ááºááá·áºá¡áá¬áá»á¬ážááŒá áºáááºá áááºážááá¯á·ááᯠâá¡áááºážá¡ááŒááºâ ááœáá·áºááŒá¯áááá·áºáᯠáá±á«áºáá±á«áºáá²á·ááŒáááºá
- á¡ááœá±áááºáá¶áááºá ááá¯ááºááœáá·áºááŒá¯áá»ááºáá»á¬ážááẠáá±á«áºááá¯ááŸá¯áá¯ááºáááºážá ááºá áááºááŸááºáá»ááºáá»á¬ážá០ááœáá·áºááŒá¯áá»ááºáá»á¬ážááᯠáááºááŸá¬ážáááºá¡ááœááºáááºáž á¡áá¯á¶ážááŒá¯ááá¯ááºááá·áº áá±á¬ááºáááºáá»ááºááŸá¬áá¯á¶ážáá áºáá¯á¡á¬áž áááºááŸááºáá±á¬áºááŒáá«áááºá áááºážááá¯á·ááẠáá±á«áºááá¯ááŸá¯áá¯ááºáááºážá ááºá á¡ááœá±áááºáá¶áá¬ážááá·áºá¡á á¯á¶á¡ááŒáẠáá»áŸá±á¬ááºáá¬ážáá±á¬ááŒá±á¬áá·áº áááºážááẠá¡ááœá²ááŸá áºáá¯á áá¯á¶ážááœáẠááŸááá±ááŸáᬠááœáá·áºááŒá¯áá»ááºáááŸááááºááŒá áºáááºá
- áááá±á¬ááºáááºá ááá¯ááºááœáá·áºááŒá¯áá»ááºáá»á¬ážááẠá¡ááŸááºááááºááœáẠáá áºáááºážáááºážáá»áŸáá¬ááŒá áºááŒá®áž set áá áºáá¯ááá¯ááºáá«á áááºááŸááºáá«áá áááŸáááá¯ááºáá±á¬ set áá áºáá¯áá¯á¶ážááᯠprocess á¡áá áºá áááá±á¬ááºáá±á¬ set áá²ááá¯á· áá°ážáá°áááºáᯠááá¯ááá¯áá«áááºá áááºážááá¯á·áá±á¬ááºážááá¯ááẠá¡áá°ážáá±ážáá¬ážáá¬ážááŒááºážáááŸááá±á¬ áá¯ááºáááºážá ááºáá»á¬ážááœáẠááœáá·áºááŒá¯áá»ááºáá»á¬ážááᯠááá·áºááœááºážááẠáááºážááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºáááºá áááºážááẠáá áºáááºážáááºážááŒá áºáá±á¬ááŒá±á¬áá·áº ááœáá·áºááŒá¯áá»ááºáá áºáá¯áá¯á¡ááœáẠáááºááŸááºáá¬ážáá«áá áááºážááᯠááœáá·áºááŒá¯áá»ááºá¡á¬ážáá¯á¶ážá¡ááœáẠáááºááŸááºááááºááŒá áºáááºá áááºážááá¯á·ááᯠáá¶á·ááá¯ážááŸá¯áááŸááá±á¬ á¡ááá®áá±ážááŸááºážáá»á¬ážá០ááœáá·áºááŒá¯áá»ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááẠá¡áá¯á¶ážááŒá¯áá±á¬ááŒá±á¬áá·áº áááºážááᯠá¡ááœá±á¡ááŸá áºá¡ááŒá Ạáááºáá°áááá¯ááºáááºá
áá
áºááá·áºáá»ááºáž ááœáá·áºááŒá¯áá»áẠáááºááŸááºááá·áºá¡áá« setcap
á
á¬áá¯á¶ážáá¯á¶ážáá¯á¶áž e
, i
О p
áááºááœáŸááºáž áááá±á¬ááºááŸá¯á á¡ááœá±áááºáá¶ááá¯ááºáá±á¬á áááºááŸááºážáá®ááá¯ááºáá±á¬ á¡áá®ážáá®ážáááºááŸááºáá¬ážáááºá ááá¯á·ááŒá±á¬áá·áºá á¡á
á±á¬ááá¯ááºážáááºááŸááºáá»ááº
sudo setcap cap_net_raw=eip tracewalk
... ááŒááºáá¬ážááŸá¯ááᯠáá±á¬áºááŒáááºá CAP_NET_RAW
áááŸáááá¯ááºáá±á¬ ááŸáá·áº á¡ááœá±áááºáá¶ááá¯ááºáá±á¬ á¡ááœá²áá»á¬ážáá²ááá¯á· áá±á«ááºážááá·áºááááºááŒá
áºááŒá®áž áááá±á¬ááºáá±á¬áá
áºááá¯áááºáž áááºááŸááºááááºááŒá
áºáááºá áááºážááẠááá¯ááºáá±á«áºááŸá ááááºáááºááŸááºáá¬ážááá·áº ááœáá·áºááŒá¯áá»ááºáá»á¬ážááᯠá¡á
á¬ážááá¯ážáááºááŒá
áºáááºá ááœáá·áºááŒá¯áá»ááºáá»á¬ážá
áœá¬ááᯠáá
áºááŒáá¯ááºááẠáááºááŸááºáááºá áá±á¬áºáᬠááŒá¬ážáá¬ážáá±á¬ á
á¬áááºážááᯠá¡áá¯á¶ážááŒá¯áá«-
sudo setcap cap_net_admin,cap_net_raw=eip tracewalk
ááááŠážá áœá¬á ááá¯ááºá áœááºážáááºáá»á¬ážááẠsymlinks áá»á¬ážááŸáá·áº á¡áá¯ááºááá¯ááºáá« - áááºážááá¯á·ááᯠbinary ááá¯ááºááá¯ááºááá¯áẠ(ááá¯ááá¯áááºááŸá¬ symlink ááá áºááŸááº) ááœáẠáááºážááá¯á·ááᯠá¡áá¯á¶ážáá»ááááºááŒá áºáááºá
áá¯áááá¡áá±ááŒáá·áºá áááºážááá¯á·ááẠáá¬áá¬ááŒááºáá¬ážáá±á¬ áá¬ááºááœáŸááºážáá»á¬ážááŸáá·áº á¡áá¯ááºááá¯ááºáá«á á¥ááá¬á ááá·áºááœáẠááœáá·áºááŒá¯áá»ááºáá±ážááá¯áá±á¬ Python script áá
áºáá¯ááŸááá«áá áááºážááᯠPython áá¬áá¬ááŒááºáá°ááá¯ááºááá¯áẠáááºááŸááºáá±ážááá«áááºá áááºážááẠSUID ááá¯ááŒá¯áá¯ááºááŒááºážááẠáááááá¬áá¬ááá¯áá±á¬ááºážáá±áá±ážáá±á¬áºáááºáž áááºážááẠá¡ááá¯áá«á
áá¬ážááŒááºááŒáá·áºáá¯ááºáá±á¬ááºááá·áº script áá»á¬ážá¡á¬ážáá¯á¶ážááœáẠáááºááŸááºáá¬ážáá±á¬ááœáá·áºááŒá¯áá»ááºááŸááááºááŒá
áºáá±á¬ááŒá±á¬áá·áºá áááºážááẠááŒá
áºááá¯ááºáá»á±ááŸááá±á¬ áá¯á¶ááŒá¯á¶áá±ážááŒá¿áá¬áá
áºáá¯ááŒá
áºáááºááŸá¬ áááºááŸá¬ážáá«áááºá á¡áá¯á¶ážá¡áá»á¬ážáá¯á¶ážááŒá±ááŸááºážáááºážááŸá¬ C ááœáẠáá®ážááŒá¬ážá
á®á
á
áºááá¯ááºáá±á¬ ááá¯á·ááá¯áẠááá¯á¡ááºááá·áºáá¯ááºáá±á¬ááºááŸá¯áá»á¬ážááá¯áá¯ááºáá±á¬ááºááá¯ááºááŒá®áž script áá
áºáá¯ááŸáá±á«áºááá¯ááá¯ááºáá±á¬ áá®ážááŒá¬ážáá¯ááºáá±á¬ááºááá¯ááºááá·áºá¡áá¬áá
áºáá¯áá±ážáááºááŒá
áºáá¯á¶ááááºá áááºážááẠbinary ááá¯á¡áá¯á¶ážááŒá¯ááá·áº Wireshark ááŸá¡áá¯á¶ážááŒá¯áá±á¬áá»ááºážáááºáá¯á¶ááŸáá·áºáááºáá°áááºá /usr/bin/dumpcap
á¡ááœáá·áºáá°ážáá¶áá¯ááºáááºážáá»á¬ážáá±á¬ááºááœááºáááº-
$ getcap /usr/bin/dumpcap
/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip
ááááá áááºááẠáááºáááºážáá»ááºááŒá±á¬ááºážáá²ááŸá¯ááᯠá¡áá¯á¶ážááŒá¯áá«á ááá¯ááºááœáá·áºááŒá¯áá»ááºáá»á¬ážááᯠááááºáá¬ážáááºá LD_LIBRARY_PATH
áááºááŸá¬ážáá±á¬ áá¯á¶ááŒá¯á¶áá±ážá¡ááŒá±á¬ááºážááŒáá»ááºáá»á¬ážá¡ááœááº(1). áá°ááŒá±á¬áᬠLD_PRELOAD
, áá»áœááºáá±á¬áºááááá±á¬ááºá
1. ááá¯ááºááá¯ááºáá°ááẠá
á¶á
á¬ááŒáá·áºááá¯ááºáá»á¬ážáá²á០áá
áºáá¯ááᯠá¡á
á¬ážááá¯ážááŒá®áž á¡áá¯á¶ážááŒá¯ááá¯ááºáá±á¬ááŒá±á¬áá·áºááŒá
áºáááºá LD_LIBRARY_PATH
áááºážáá
á¬ááŒáá·áºááá¯ááºááᯠá
áá
áºáá
áºáá¯á¡á¬áž áŠážá
á¬ážáá±ážáá±á«áºááẠá¡áááºážá¡ááŒááºáá±á«áºááá¯áááºá ááá¯á·ááŒá±á¬áá·áº áá±á«áºááá¯ááŸá¯á¡ááá®áá±ážááŸááºážáá²á·ááá¯á· áá°áá®áá±á¬á¡ááœáá·áºáá°ážáá»á¬ážááŒáá·áº áááºážáááá¯ááºááá¯ááºáááºáááá¯áá¯ááºááᯠáá¯ááºáá±á¬ááºáá±ážáá«áááºá
áá«áá«áá²á áááºáááºážá¡á
á®á¡á
ááºá¡áá±ážá
áááºá¡á¬áž á¡á±á¬ááºáá«ááá·áºááœáẠááŒáá·áºááŸá¯ááá¯ááºáá«áááºá
source: www.habr.com