АНАЛИЗ БЕЗОПАСНОСТИ ПЕРЕДАЧИ ГОЛОСОВОГО ТРАФИКА В VOIP И ОБЕСПЕЧЕНИЕ ЕГО ЗАЩИЩЕННОСТИ. Дипломная работа специалиста
Скачать 1.45 Mb.
|
5.5.3. Достоинства и недостатки Разработанное средство позволяет защитить голосовой трафик, передающийся при помощи IP-телефонии. При этом отсутствует зависимость от каких-либо средств разработки и других инструментов, предоставляемых VoIP-клиентами. тоже время для использования данного средства предъявляются повышенные требования к передаче голоса по сети. Не допускается сильное сжимание потока при передаче, помехи и прочие видоизменения сигнала. Данным требованиям могут удовлетворить лишь специализированные, корпоративные средства VoIP, например, программный клиент Cisco Jabber Video for TelePresence, который используется в Правительстве Санкт-Петербурга. 59 ЗАКЛЮЧЕНИЕ данной работе были исследованы, проанализированы и классифицированы угрозы VoIP. Отдельно рассмотрены проблемы протокола Skype, самого распространенного VoIP-клиента в мире. Показано, что уровень безопасности Skype не является достаточным для безопасного взаимодействия с целью передачи конфиденциальных данных. связи с изложенным, в данной работе предложен способ обеспечения безопасного взаимодействия в рамках Skype, а именно использование оконечного шифрования при передаче голоса и сообщений. Было разработано программное средство, реализующее указанный подход, и, поддерживающее весь необходимый для безопасного взаимодействия функционал, а именно: Установка сеансового ключа по классическому протоколу Диффи- Хеллмана с заданным абонентом. Отправка сообщений, зашифрованных по алгоритму симметричного шифрования ГОСТ 28147-89 заданному абоненту. Прием зашифрованных сообщений и их расшифрование. Установка сеансового ключа в момент совершения вызова. Зашифрования исходящего аудиосигнала. Расшифрование входящего аудиосигнала. результате было получено средство, обеспечивающее безопасное общение посредством Skype. Однако исследования и разработка, проводимые в рамках данной дипломной работы, на этом не закончились. Была проанализирована возможность создания средства, обеспечивающего безопасное общение не только посредством Skype, но и любого другого VoIP-клиента. Такая возможность была найдена. 60 Для этого было использовано виртуальное аудиоустройство и реализованы следующие функции: Обмен звуковыми потоками между входящим и исходящим интерфейсами, т.е. между динамиком и микрофоном. Зашифрование или расшифрование сигнала во время обмена потоками между входным и выходным интерфейсами аудиоустройства. результате было получено виртуальное аудиоустройство, реализующее оконечное шифрование передаваемого голосового трафика. Для безопасного взаимодействия посредством VoIP достаточно выбрать его в качестве входного или выходного аудиоинтерфейса. Таким образом, в данной работе были предложены способы достижения безопасной передачи голоса посредством VoIP. 61 СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ Студенческая научная конференция "Информатика и кибернетика". [Электронный ресурс] URL: http://www.ftk.spbstu.ru/news/1360008/ (дата обращения: 09.05.2015). Baset S., Schulzrinne H. An Analysis of the Skype Peer-to-Peer Internet Telephony Protocol. Department of Computer Science Columbia University, New York 2004. DoesSkypeuseencryption?[Электронныйресурс].URL: https://support.Skype.com/en/faq/FA31/does-Skype-use-encryption?q=security (дата обращения: 09.05.2015). LoopbackAudioDriver. [Электронный ресурс] URL: https://github.com/02strich/LoopbackAudioDriver (дата обращения: 09.05.2015). Microsoft Virtual Audio Device Driver Sample. [Электронный ресурс] URL: https://code.msdn.microsoft.com/windowshardware/virtual-audio-device-3d4e6150 (дата обращения: 09.05.2015). Microsoft помогал АНБ и ФБР шпионить за пользователями Hotmail, Skype и Outlook [Электронный ресурс]. URL: http://habrahabr.ru/post/186460/ (дата обращения: 09.05.2015). SearchInformSkypeSniffer[Электронныйресурс].URL: http://searchinform.ru/main/full-text-search-information-security-product-Skype-sniffer.html (дата обращения: 09.05.2015). Skype and the Bavarian trojan in the middle [Электронный ресурс]. URL: http://wikileaks.org/wiki/Skype_and_the_Bavarian_trojan_in_the_middle (дата обращения: 09.05.2015). Skype захватил 40% международных разговоров [Электронный ресурс]. URL: http://www.white-windows.ru/skype-zakhvatil-40-mezhdunarodnykh-razgovorov/ (дата обращения: 09.05.2015). 62 Skype меняет топологию своей сети [Электронный ресурс]. URL: http://www.cybersecurity.ru/news/150078.html (дата обращения: 09.05.2015). Skypeнеуязвим?Миф![Электронныйресурс].URL: http://discussiya.com/2012/09/17/Skype-securiry/ (дата обращения: 09.05.2015). System.Net.Sockets – пространство имен. [Электронный ресурс] URL: https://msdn.microsoft.com/ru-ru/library/system.net.sockets(v=vs.110).aspx (дата обращения: 09.05.2015). Top Ten Security Issues Voice over IP (VoIP). [Электронный ресурс] URL: http://www.designdata.com/wp- content/uploads/sites/321/whitepaper/top_ten_voip_security_issue.pdf (дата обращения 09.05.2015). VoIP Security and Privacy Threat Taxonomy. [Электронный ресурс] URL: http://www.voipsa.org/Activities/VOIPSA_Threat_Taxonomy_0.1.pdf (дата обращения 09.05.2015). Voice Security Primer: Protecting the Voice Infrastructure, Call-Management System,Applications,andEndpoints.[Электронныйресурс]URL: http://www.cisco.com/c/en/us/solutions/collateral/enterprise/unified-communications-ip- communications-voip/net_implementation_white_paper0900aecd80460724.html (дата обращения 09.05.2015). WDK, debugging tools, and driver samples. [Электронный ресурс] URL: https://msdn.microsoft.com/en-us/windows/hardware/gg454513.aspx (дата обращения: 09.05.2015). Головкова А.С. Skype: Возможности и угрозы / Головкова А.С., Краснощекова М.С. // Студенческий научный форум: IV Международная студенческая электронная научная конференция (15 февраля – 31 марта 2012). ГОСТ 28147-89. Системы обработки информации. Защита криптографическая. Алгоритм криптографического преобразования. [Электронный ресурс]URL:http://protect.gost.ru/document.aspx?control=7&id=139177(дата обращения: 09.05.2015). 63 Громов И. А. Стратегия и ход информатизации Санкт-Петербурга: основные задачи на 2013-2015 годы [Электронный ресурс]. URL: http://www.cnews.ru/reviews/ppt/forum_plenum/13.%20gromov_ivan.pdf (дата обращения: 09.05.2015). Идов Р. Правда и вымыслы о прослушивании Skype//Директор по безопасности. 2011. № 7. С. 64–66. Касаткин Ф. Связанные одной сетью // ИТ-диалог. 2014. № 6. С. 20–23. Положение о конфиденциальности в Skype [Электронный ресурс]. URL: http://www.Skype.com/ru/legal/privacy/ (дата обращения: 09.05.2015). Семейство продуктов сетевой безопасности ЗАСТАВА [Электронный ресурс]. URL: http://www.zastava.ru/upload/zastava/zastava_opisanie_2014.pdf (дата обращения: 09.05.2015). 64 ПРИЛОЖЕНИЕ А Оконечное шифрование в Skype namespace CryptoSkype { class Intercept : IDisposable { NetworkStream outStream; Call call; public static ILog log,msg_log; public static string nick; public static BigInteger p, g, a, b, recv; public static BigInteger[] exp = new BigInteger[100]; public static StrongNumberProvider _strongRng = new StrongNumberProvider(); public static bool role = false; public static UserCollection members; public static User user; public static IChat ichat; public static byte[] key = new byte[0]; public static bool key_status = false; public static bool multi = false, multicall = false; public static string[] users; public static int count; public static int index = 0, ii = 0; private void skype_MessageStatus(ChatMessage msg, TChatMessageStatus status) { //перехват входящих и исходящих сообщений if (msg.Body.IndexOf(trigger) == 0 && String.Compare(status.ToString(), "cmsReceived") == 0) { string mesg = msg.Body.Remove(0, trigger.Length); string type = mesg.Substring(0, 1); mesg = mesg.Remove(0, 1); switch (type) {//обмен сообщениями по протоколу Диффи-Хеллмана case "m"://групповой чат multi = true; count = Convert.ToInt32(mesg); users = new string[count]; exp = new BigInteger[100]; messages = new string[1000]; mes_num = 0; break; case "u"://абоненты группового чата users[0] = mesg; break; case "p": p = new BigInteger(mesg, 36); 65 index = 0; = 0; key = null; key_status = false; role = false; break; case "g": g = new BigInteger(mesg, 36); break; case "e": if (!role) //пассивная роль в установлении //ключа { if (multi)//групповой чат { exp[ii] = new BigInteger(mesg, 36); if (index == 0) { a = BigInteger.GenPseudoPrime(512, 30, MicInterceptor._strongRng); skype.SendMessage(users[0], "!#skey_init#!e" + g.ModPow(a, p).ToString(36)); } if (index == count - 1) { key = new byte[exp[ii].ModPow(a, p).GetBytes().Length]; key = exp[ii].ModPow(a, p).GetBytes(); key_status = true; msg_log.Info(true, "==========================================="); msg_log.Info(true, "Chat opened."); } else if (index < count - 1) { skype.SendMessage(users[0], "!#skey_init#!e" + exp[ii].ModPow(a, p).ToString(36)); } index++; ii++; } else //чат с одним абонентом { recv = new BigInteger(mesg, 36); a = BigInteger.GenPseudoPrime(512, 30, MicInterceptor._strongRng); skype.SendMessage(msg.Sender.Handle, "!#skey_init#!e" + MicInterceptor.g.ModPow(MicInterceptor.a, MicInterceptor.p).ToString(36)); 66 key = new byte[recv.ModPow(a, p).GetBytes().Length]; key = recv.ModPow(a, p).GetBytes(); key_status = true; } } else//активная роль в установлении ключа { if (multi) //групповой чат { exp[ii] = new BigInteger(mesg, 36); if (index == count - 1) { key = new byte[exp[ii].ModPow(b, p).GetBytes().Length]; key = exp[ii].ModPow(b, p).GetBytes(); key_status = true; for (int i = 0; i < users.Length; i++) { user = new SKYPE4COMLib.User(); user.Handle = users[i]; members.Add(user); } ichat = skype.CreateChatMultiple(members); msg_log.Info(true, "==========================================="); msg_log.Info(false, "Chat opened."); ichat.SendMessage("!#chat_init#!"); } else if (index < count - 1) { skype.SendMessage(users[0], "!#skey_init#!e" + exp[ii].ModPow(b, p).ToString(36)); } index++; ii++; } else //чат с одним абонентом { recv = new BigInteger(mesg, 36); key = new byte[recv.ModPow(b, p).GetBytes().Length]; key = recv.ModPow(b, p).GetBytes(); key_status = true; role = false; } } break; } 67 } else if (msg.Body.IndexOf(trigger2) == 0 && String.Compare(status.ToString(), "cmsReceived") == 0) {//приём и расшифорвание зашифрованного сообщения string mesg = msg.Body.Remove(0, trigger2.Length); byte[] uplain = GetBytes(mesg); byte[] decr = new byte[uplain.Length]; Gost28147.Gost28147EcbDecrypt(decr, uplain, key); msg_log.Info(false, " from {0}\n{1} ", msg.FromHandle ,GetString(decr)); } } void OnSkypeCallStatus(Call call, TCallStatus status) {//установка сеансового ключа в момент совершения вызова log.Info(false, "SkypeCallStatus: {0}", status); if (status == TCallStatus.clsRouting) { role = true; this.call = call; nick = call.PartnerHandle; key = BigInteger.GenPseudoPrime(512, 30, _strongRng).GetBytes(); DHkey(); } } void DHkey() {//установка и отправка параметров для установки сеансового ключа по классическому протоколу Диффи-Хеллмана if (role) { p = BigInteger.GenPseudoPrime(256, 30, _strongRng); b = BigInteger.GenPseudoPrime(256, 30, _strongRng); g = (BigInteger)2; skype.SendMessage(nick, "!#skey_init#!p" + p.ToString(36)); skype.SendMessage(nick, "!#skey_init#!g" + g.ToString(36)); skype.SendMessage(nick, "!#skey_init#!e" + g.ModPow(b, p).ToString(36)); } } void OnMicServerExecute(object sender, DataReceivedEventArgs args) {//Зашифрование исходящего аудиопотока if (outStream != null) { bufferStream.SetLatestInBuffer(args.Buffer); byte[] encr = new byte[args.Buffer.Length]; 68 Gost28147.Gost28147Ecb(args.Buffer, encr, key); outStream.Write(encr, 0, encr.Length); } } } } namespace CryptoSkype { [Export(typeof(MainForm))] public partial class MainForm : Form { public MainForm() { InitializeComponent(); var log = new RichTextLogger(this.richTextBox1); var msg_log = new RichTextLogger(this.richTextBox2); audioGraph = new MainFormAudioGraph(log, msg_log); audioGraph.ConnectToSkpe(); } private void button1_Click(object sender, EventArgs e) {//сохранение сеансового ключа в файл SaveFileDialog save = new SaveFileDialog(); save.InitialDirectory = Convert.ToString(Environment.SpecialFolder.MyDocuments); save.Filter = "Session key file (*.KEY)|*.key|All Files (*.*)|*.*"; if (save.ShowDialog() == DialogResult.OK) { using (FileStream fstream = new FileStream(save.FileName, FileMode.OpenOrCreate)) { fstream.Write(Intercept.key, 0, Intercept.key.Length); } } } private void button2_Click(object sender, EventArgs e) {//открытие сеансового ключа из файла OpenFileDialog open = new OpenFileDialog(); open.InitialDirectory = Convert.ToString(Environment.SpecialFolder.MyDocuments); open.Filter = "Session key file (*.KEY)|*.key|All Files (*.*)|*.*"; open.Title = "Select a SessionKey File"; if (open.ShowDialog() == DialogResult.OK) { 69 using (FileStream fstream = File.OpenRead(open.FileName)) { Intercept.key = new byte[fstream.Length]; fstream.Read(Intercept.key, 0, Intercept.key.Length); Intercept.log.Info(false, "Session key: {0}", Intercept.GetString(Intercept.key)); } } } private void button3_Click(object sender, EventArgs e) {//установка сеансового ключа с заданным абонентом Intercept.role = true; if (textBox1.Text == "") MessageBox.Show("Имя пользователя не заполнено"); else { Intercept.nick = textBox1.Text; DHkey(); textBox3.Text = textBox1.Text; } } private void button4_Click(object sender, EventArgs e) {//зашифрованный чат между абонентами if (Intercept.key.Count else if (textBox2.Text != "" && textBox3.Text != "") { Intercept.nick = textBox3.Text; byte[] plain = Intercept.GetBytes(textBox2.Text); byte[] encr = new byte[plain.Length]; Gost28147.Gost28147Ecb(plain, encr, Intercept.key); Intercept.msg_log.Info(false, " to {0}\n{1}", textBox3.Text,textBox2.Text); Intercept.skype.SendMessage(Intercept.nick, "!#encr__msg#!" + Intercept.GetString(encr)); textBox2.Clear(); } } } } 70 ПРИЛОЖЕНИЕ Б Установщик драйвера (cryptoaudio.inf) [Version] Signature="$CHICAGO$" Class=MEDIA Provider=%MSFT% ClassGUID={4d36e96c-e325-11ce-bfc1-08002be10318} DriverVer = 02/22/2007, 6.0.6000.1 [SourceDisksNames] 222="CryptoAudio","",222 [SourceDisksFiles] cryptoaudio.sys=222 cryptoaudio2.sys=222 [Manufacturer] %MfgName%=MicrosoftDS,NTAMD64 [MicrosoftDS] %cryptoInput.DeviceDesc%=cryptoInput,*cryptoInput %cryptoOutput.DeviceDesc%=cryptoOutput,*cryptoOutput [MicrosoftDS.NTAMD64] %cryptoInput.DeviceDesc%=cryptoInput,*cryptoInput %cryptoOutput.DeviceDesc%=cryptoOutput,*cryptoOutput [DestinationDirs] cryptoInput.CopyList=10,system32\drivers cryptoOutput.CopyList=10,system32\drivers ;====================================================== |