LXF143:AR Drone

Материал из Linuxformat.

Перейти к: навигация, поиск
Дрон на Linux

Содержание

Мы по­смот­рим, что внут­ри АR.Drone

Это ди­во-квад­ри­коп­тер – са­мая компактная и про­стей­шая из ле­таю­щих ко­пий Linux. Как по­нял Грэм Уэл­дон, с ним еще и прико­льно.

AR.Drone с на­са­жен­ным кор­пу­сом для за­пус­ка вне по­ме­ще­ний.

Корпус для по­ле­тов внут­ри по­ме­ще­ний вы­пол­нен так, что­бы не пе­ре­бить цен­ные ве­щи.

АR.Drone от Parrot добился колоссальных успехов с мо­мен­та вы­пуска в сен­тяб­ре 2010 го­да, и по­сто­ян­но по­ра­жа­ет иг­ро­вые со­об­ще­ст­ва и со­об­ще­ст­ва раз­ра­бот­чи­ков. Бо­лее то­го, по­ко­пав­шись в нем, мы об­на­ру­жи­ли, что AR.Drone ра­бо­та­ет под Linux. Здесь мы рас­смот­рим, что де­ла­ет этот гад­жет.

Под­клю­чить его к ва­ше­му ком­пь­ю­те­ру очень лег­ко, по­то­му что это уст­рой­ст­во Wi-Fi. Как та­ко­вое, он вы­гля­дит спе­ци­аль­ной се­тью, к ко­то­рой за­тем мож­но при­сое­динить­ся с лю­бо­го ком­пь­ю­те­ра, имею­ще­го бес­про­вод­ную се­те­вую кар­ту. От­ме­тим, од­на­ко, что ес­ли вы уже со­единили его с мо­биль­ным уст­рой­ст­вом, IP-ад­рес не бу­дет на­зна­чать­ся при под­клю­чении к се­ти, и к нему невоз­мож­но бу­дет под­сое­динить­ся. Что­бы обой­ти эту про­бле­му, за­пусти­те мо­биль­ное уст­рой­ст­во и от­клю­чи­те функ­цию спа­ри­вания в на­строй­ках при­ло­жения Free Flight, или про­сто на­жми­те кноп­ку Ра­зо­рвать па­ру [Unpair] на уст­рой­ст­ве.

Итак, что мы мо­жем по­черп­нуть из этой иг­руш­ки, не раз­би­рая ее на час­ти? Так как мы в его се­ти и зна­ем его IP-ад­рес, сканиро­вание пор­тов бу­дет хо­ро­шей от­прав­ной точ­кой. Вы­полнив это, мы уз­на­ем, ка­кие пор­ты от­кры­ты и доступ­ны, а так­же, ве­ро­ят­но, пой­мем, ка­кой доступ мы по­лу­чим для под­клю­чения к уст­рой­ст­ву.

За­пуск nmap по­ка­зал два ин­те­ре­сую­щих нас пор­та:

21/tcp open ftp
23/tcp open telnet

По­пы­тав­шись уста­но­вить под­клю­чение к сво­бод­но­му пор­ту telnet, мы по­па­дем в Bash без необ­хо­ди­мо­сти вво­да па­ро­ля. Ин­фор­ма­ция по вхо­ду по­ка­зы­ва­ет, что нам уда­лось под­клю­чить­ся к уста­нов­ке Linux c BusyBox и что есть доступ­ный но­мер вер­сии, по­это­му мы мо­жем про­ве­рить ин­тим­ные под­роб­но­сти и во­ про­сы безо­пас­но­сти, ес­ли это необ­хо­ди­мо.

Дальней­шее рас­смот­рение по­ка­зы­ва­ет, что нас на са­мом де­ле непри­ну­ж­ден­но сбро­си­ли под root без па­ро­ля, и мы по­лу­чи­ли пол­ный доступ к уст­рой­ст­ву.

# echo $USER
root

Как-то уж слиш­ком лег­ко. Ле­де­нею при мыс­ли, что кто-то по со­сед­ст­ву мо­жет под­сое­ди­нить­ся к се­ти с не­тбу­ка и по­уби­вать про­цес­сы, пока я бу­ду па­рить на квад­ри­коп­те­ре в не­бе­сах.

Об­зор обо­ру­до­ва­ния

Да­вай­те взгля­нем на ин­фор­ма­цию по про­цес­со­ру и па­мя­ти:

# cat /proc/cpuinfo
Processor: ARM926EJ-S rev 5 (v5l)
BogoMIPS: 233.47
Features: swp half thumb fastmult edsp java
CPU implementer: 0x41
CPU architecture: 5TEJ
CPU variant: 0x0
CPU part: 0x926
CPU revision: 5
Cache type: write-back
Cache clean: cp15 c7 ops
Cache lockdown: format C
Cache format: Harvard
I size: 32768
I assoc: 4
I line length: 32
I sets: 256
D size: 16384
D assoc: 4
D line length: 32
D sets: 128
Hardware: Mykonos Parrot platform
Revision: 0904
Serial: 0000000000000000

А так­же ин­фор­ма­ция от­но­си­тель­но па­мя­ти:

# cat /proc/meminfo
MemTotal: 126072 kB
MemFree: 105652 kB
Buffers: 0 kB
Cached: 3604 kB

Здесь 128 МБ опе­ра­тив­ной па­мя­ти на бор­ту – немно­го боль­ше, чем вы ожи­дае­те най­ти на столь ма­лень­кой штучке. Па­мя­ти и вы­чис­ли­тель­ной мощ­но­сти хва­та­ет для достой­но­го встро­ен­но­го уст­рой­ст­ва, и мы зна­ем, что на нем как минимум ра­бо­та­ют де­мо­ны FTP и telnet. По­ра про­смот­реть пол­ный спи­сок про­цес­сов и уви­деть, что еще есть внут­ри.

Под­бе­рем­ся по­бли­же

Взгля­нув на спи­сок за­пу­щен­ных про­цес­сов, мы най­дем не так уж мно­го по­лез­ных для нас, но среди них есть де­мон FTP, а так­же Telnet, DHCP-сер­вер и syslogger. Кро­ме то­го, есть два ин­те­рес­ных про­цес­са, ко­то­рые вы­гля­дят спе­ци­фич­ны­ми для это­го уст­рой­ст­ва, и, гля­дя на пол­ный спи­сок всех за­пу­щен­ных про­цес­сов, мож­но заключить, что один из них от­ве­ча­ет за об­ра­бот­ку всех эле­мен­тов управ­ления и вы­во­да ви­део об­рат­но на ва­ше мо­биль­ное уст­рой­ст­во. Со­от­вет­ст­вую­щая ин­фор­ма­ция здесь при­во­дит­ся ни­же:

960 root 2736 S /bin/sh /bin/check_update.sh
961 root 11824 S /bin/program.elf

С ви­ду этот про­цесс program.elf по­хож на хостинг основ­но­го ко­да уст­рой­ст­ва. Здесь недосту­пен ис­ход­ный код, и он, ве­ро­ят­но, был при­ком­пи­ли­ро­ван к ма­те­рин­ской пла­те, что­бы за­крыть ис­ход­ный код от поль­зо­ва­те­лей.

Про­цесс check_update.sh вы­гля­дит доступ­ным для чтения – по­чи­та­ем его, за­пус­тив vi или cat:

# cat /bin/check_update.sh

По­хо­же, что он кон­тро­ли­ру­ет ка­та­лог про­шив­ки в по­ис­ках но­вых вер­сий для об­нов­ления. Итак, остал­ся толь­ко один про­цесс – program.elf. Он, ве­ро­ят­но, от­ве­ча­ет за всю ком­муника­цию и взаи­мо­дей­ст­вие с мо­биль­ны­ми уст­рой­ст­ва­ми.

По вы­да­че от netstat мы уви­дим, есть ли от­кры­тые пор­ты, и ес­ли да, то ка­кие и к ка­ко­му ад­ре­су они при­вя­за­ны. Ста­рый до­б­рый netstat от­лич­но под­хо­дит для от­сле­жи­вания ис­поль­зуе­мо­го при­ло­жением пор­та и от­лад­ки се­те­вых про­блем. Да­вай­те по­смот­рим, что тут мож­но най­ти.

Ко­ман­да netstat -р по­ка­зы­ва­ет, что у нас есть от­кры­тый порт TCP на 5559 и три UDP-пор­та – 5554, 5555 и 5556, все при­над­ле­жа­щие про­цес­су program.elf. С уче­том функ­цио­наль­но­сти AR.Drone, на это есть це­лый ряд воз­мож­ных при­чин. Один порт ну­жен для управ­ления са­мим уст­рой­ст­вом, еще два – для ви­део­ка­на­лов пе­редней и нижней ка­мер. Это ох­ва­ты­ва­ет UDP-пор­ты, но что­бы бо­лее точ­но оп­ре­де­лить, для че­го ка­кой порт пред­на­зна­ча­ет­ся, сле­ду­ет смот­реть бо­лее при­сталь­но.

При­ме­ча­тель­но, что един­ст­вен­ным ме­ханиз­мом безо­пас­но­сти, встро­ен­ным в уст­рой­ст­во, яв­ля­ет­ся техника спа­ри­вания уст­ройств, доступ­ная в на­строй­ках при­ло­жения: Free Flight. Ее нуж­но вклю­чать для пре­дот­вра­щения вред­ных ху­ли­га­нов по Wi-Fi, ко­то­рые мо­гут за­хва­тить кон­троль над уст­рой­ст­вом, когда оно на­хо­дит­ся в по­ле­те.

Вы­со­кий по­лет

AR.Drone ве­ли­ко­леп­но обо­ру­до­ван – име­ет встро­ен­ный Linux, мно­го опе­ра­тив­ной па­мя­ти и на­деж­ную ме­ханиче­скую часть для обес­пе­чения по­ле­та. То, что на са­мом де­ле от­кры­ва­ет ряд воз­мож­но­стей для этой уди­ви­тель­но за­хва­ты­ваю­щей иг­руш­ки, доступ­но на встро­ен­ной уста­нов­ке Linux BusyBox. С ко­пи­ей Linux, ле­таю­щей под ва­шим кон­тро­лем, вы по­лу­чае­те воз­мож­ность де­лать мно­го необыч­ных ве­щей.

Вы­пол­няя про­стые сканиро­вания пор­тов и про­вер­ки от­кры­тых пор­тов и про­цес­сов, мож­но пе­ре­да­вать па­ке­ты ту­да и об­рат­но в уст­рой­ст­во, что по­тен­ци­аль­но по­зво­ля­ет соз­да­вать по­то­ко­вое ви­део и ме­ханиз­мы кон­тро­ля, ко­то­рые ис­поль­зу­ют­ся на вы­бран­ном язы­ке или плат­фор­ме.

Че­го бы я ожи­дал от со­об­ще­ст­ва AR.Drone в бу­ду­щем – это основ­ное при­ло­жение с от­кры­тым ко­дом для управ­ления уст­рой­ст­вом. Это от­кры­ло бы же­ле­зо на ис­поль­зо­вание лю­бо­го ва­ри­ан­та Linux. А по­ка что это од­на из сла­бых сто­рон, ко­то­рая не долж­на ме­шать раз­ви­тию од­ной из са­мых увлекательных со­вре­мен­ных иг­ру­шек.

Личные инструменты
  • Купить электронную версию
  • Подписаться на бумажную версию