Получение root доступа в Mac OS X без пароля

    Краткий пост об уязвимости, найденной примерно полгода назад.


    Эксплойт позволяет злоумышленнику получить root доступ к системе без пароля из-за уязвимости в sudo. Работа проверена на Mac OS 10.7 — 10.8.4, возможно также уязвимы более ранние версии. Работа эксплойта возможна благодаря возможности без пароля перевести время в Mac OS на первое января 1970 года.

    Эксплойт уже пару дней доступен в Metasploit.
    (via packetstormsecurity)
    Поделиться публикацией
    Похожие публикации
    Реклама помогает поддерживать и развивать наши сервисы

    Подробнее
    Реклама
    Комментарии 49
    • +53
      Астрологи объявили неделю эксплойтов Apple.
      Продажи конкурентов увеличились вдвое.
      • –8
        Это… это прекрасно, спасибо.
      • +8
        Баг работает на всех версиях операционок Mac OS X, где изменение настроек системных часов не требует ввода пароля. Подобная проблема существует и в ОС Linux. Радует то, что такой метод получения прав доступа к файлам имеет достаточно серьезные ограничения. Злоумышленник должен иметь физический или удаленный доступ к системе с правами администратора, а также хотя бы раз запустить команду sudo ранее. © iguides.ru
        • –6
          В 10.9 уверен не работает.
          • +9
            Как можно быть уверенным, если не проверили?
            • –14
              Не знаю, такое ощущение что они давно знают о багах, но фиксы делают только в 10.9
              • +7
                Ерунду говорите.
                • +27
                  Эксполит работает до версии 1.7.10p6, в 10.9 по умолчанию идёт 1.7.10p7, где уже стоит фикс.
                  Насчёт данного эксплоита аналогично.

                  Можете поставить на виртуалку самую первую версию беты 10.9, и там уже есть фиксы. При этом для 10.8 из обновлений максимум новые версии драйверов.

                  Спасибо за снижение кармы в ноль.
                  • +2
                    подтверждаю, в 10.9 не работает :(
                    • +5
                      Ну вот так бы сразу. =)
            • 0
              (del, про CAP_SYS_TIME не актуально)
            • +4
              А можно подробностей то=), причем тут часы?
              • –12
                Если установить часы компьютера на 1 января 1970 года, то Unix в этом случае сбрасывает счетчик и отсчет времени начинается с нуля. См. UNIX-время
                Именно благодаря этой особенности, защиту прав доступа к файлам можно обойти.
                • +23
                  sudo позволяет опускать ввод пароля, если он был недавно введен

                  вероятно, если sudo никогда не использовался (или есть другие причины?), то время его последнего использования — 0 по unix time. если установить часы в это время (как раз 1 января 1970), то sudo опустит ввод пароля и сразу даст права.

                  в линуксах такой проблемы нету, т.к. в них нельзя изменить дату без административных прав
                  • +1
                    А если поменять дату в CMOS? Надо попробовать.
                    • +1
                      Во всяких дебианах есть сервис, который не позволяет sudo запоминать пароли между ребутами. Как в остальных — не знаю, правда :)
                    • 0
                      Тоесть это надо запустить sudo в туже секунду что и изменение времени в ноль?
                      • +1
                        Необязательно в ту же секунду. Таймаут обычно стоит в 10-15 минут.
                        • 0
                          Ага, я и забыл совсем, про таймаут.
                      • 0
                        На Metasploit советуют выполнить «sudo -k» — это «убивает сессию» sudo. Видимо, это реализуется именно путём замены времени последнего использования на 0.
                    • +4
                      Если прислать нулевое время по NTP, то можно взломать и Linux?
                      • 0
                        Уже «взламывали», вроде, сбросом времени в биосе. Не могу найти ссылок
                        • 0
                          С БИОСОМ все же ограничений довольного много. На него еще и пароль можно сделать. Если же есть физ. доступ к машине (как это нужно в случае с БИОС), то подключить в ее свою сетку, где будет «правильный» NTP сервер — вообще элементарно.
                          • +2
                            по идеи ntpd не должен дать изменить время на такую дельту, разве нет?
                            • 0
                              Если на сырой машине у которой села батарейка в биосе стоит 0, то ntpd должен дать изменить время на 2013 год, такая же дельта.
                              • +2
                                Но с обратным знаком.
                                • +1
                                  ntpd не поменяет при этом время (см. мой коммент ниже), а вот ntpdate — за милую душу. вопрос в том, что именно используется в конкретной ОС
                                • 0
                                  Возможно. Однако, я пролистал ман и википедию перед тем, как писать первое сообщение, и ничего по этому поводу не нашел.
                                  • +2
                                    из мана по ntpd:
                                    -g
                                    Normally, ntpd exits with a message to the system log if the offset exceeds the panic threshold, which is 1000 s by default. This option allows the time to be set to any value without restriction; however, this can happen only once. If the threshold is exceeded after that, ntpd will exit with a message to the system log. This option can be used with the -q and -x options. See the tinker command for other options.
                              • +3
                                Если есть доступ к биосу и время на ребуты, проще подключить флешку и слить инфу.
                                Или же запустить в single user mode
                            • 0
                              А как фиксить такую уязвимость? Я даже не придумаю. Только просить рута для смены времени, но это ухудшение юзабилити.
                              • +5
                                Не давать ставить системное время меньше чего-то (даты выпуска ноута, 2000 года, да всё равно).
                                • +6
                                  Аха, а потом как путешествия во времени изобретут все будут плеваться и придумывать костыли, как бы обходить это ограничение. Нет уж, не надо!
                                  • 0
                                    Перенесся в 01.01.1970 и поделил на 0
                                • +3
                                  Заставить sudo спрашивать пароль при каждом запуске?
                                  для этого добавить в sudoers:
                                  Defaults:ALL timestamp_timeout=0

                                  upd. Или timestamp_timeout не влияет на уязвимость?
                                  • 0
                                    Это уменьшает юзабилити. Причём сильно. Посмотрите на Windows начиная с Vista, какую реакцию вызвала у пользователей необходимость ввода пароля на каждый чих. Причём если начал делать административные задачи, то обычно выполняешь их несколько за раз.
                                    • 0
                                      Не хотят — пускай отключают. Их безопасность — их проблемы.
                                      • 0
                                        «sudo -i» можно использовать, если несколько административных задач надо выполнить.
                                    • +4
                                      Как насчет просто добавить в sudo дополнительную проверку? Аля if (systemtime() < 10000) forceAskPassword();
                                      • +5
                                        но это ухудшение юзабилити

                                        Как часто вы меняете системное время? Настолько часто, что лень вводить пароль? :)
                                        • +6
                                          Элементарно — просто избавиться от костылей. Нужно различать состояния «пароль никогда не был введен» и «пароль был введен 1 января 1970 года».
                                          • –2
                                            Раз sudo запоминает когда был введен пароль крайний раз, то сделать проверку не в будущем ли это.
                                            • 0
                                              Странно как-то, что она вообще есть. По логике вещей, если был ребут, то пароль нужно спрашивать всегда, даже если таймаут еще не прошел. Как писали выше, так делается в дебиане и производных. Чтобы проверить, не прошел ли таймаут безпарольного доступа, можно опираться не на системное время от начала unix эпохи, а, например, на аптайм. Т.е. хранить где-нибудь запись о том, что пароль вводился на n-ной секунде аптайма, и спрашивать пароль, если время прошло.
                                            • 0
                                              Есть предназначенные именно для таких случаев clock_gettime(CLOCK_MONOTONIC_RAW) (>=linux-2.6.28, ниже CLOCK_MONOTONIC) и mach_absolute_time() (Mac OS X). В отличие от обычных, эти часы никогда не убывают и не имеют никакого отношения к мировому или местному времени: man clock_gettime:

                                              CLOCK_MONOTONIC
                                              Часы, которые не могут быть настроены и показывают монотонный ход времени отсчитываемой с некой неопределённой начальной точки. Эти часы не подвержены скачкам системного времени (например, системный
                                              администратор вручную изменил время), но на них влияет постепенная подгонка, выполняемая adjtime(3) и NTP.

                                              CLOCK_MONOTONIC_RAW (начиная с Linux 2.6.28; есть только в Linux)
                                              Похожи на CLOCK_MONOTONIC, но предоставляют прямой доступ к аппаратным часам, которые не подводятся NTP или постепенной подгонкой, выполняемой adjtime(3).
                                            • +1
                                              Опять «полгода назад»?
                                              • +2
                                                10.8.4 — требует пароль для смены времени…
                                                • +1
                                                  это если у Вас замочек стоит внизу, тогда спрашивает. А если разлочить замок — спрашивать больше не будет.
                                                  • 0
                                                    спасибо — поставил замочек )

                                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.