[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Decrypting data within an opened channel?
[Thread Prev] | [Thread Next]
- Subject: Re: Decrypting data within an opened channel?
- From: Karl Scott <karlscottbg@xxxxxxxxx>
- Reply-to: libssh@xxxxxxxxxx
- Date: Mon, 12 Oct 2015 02:05:46 -0700
- To: libssh@xxxxxxxxxx
Hi Aris, I think you're right that I'm confused there somehow. I'm not entirely sure it is possible for there to be two HMACs in there though, since 44 bytes of data + 7 bytes of padding + 348 bytes of data + 18 bytes of padding yeilds 417 bytes of my 440 byte data (the total bytes read from the socket), so I think there is only room for one 20 byte HMAC in there...? -Karl On Sun, Oct 11, 2015 at 4:40 AM, Aris Adamantiadis <aris@xxxxxxxxxxxx> wrote: > Hi Karl, > > I think you are confused by the packet parsing. Each packet has exactly > one HMAC, so I think the two "messages" you found in a single packet may > be two different packets. > > Aris > > Le 10/10/15 03:56, Karl Scott a écrit : > > Hi Aris, > > > > Thanks for the response. > > > > To begin, I do understand that public key authentication will not > > work. This is ok for my case, since I am strictly using password > > authentication. > > > > To end, I looked carefully for any state changes/unintended side > > effects I could be causing that I missed on the first pass through -- > > and, it looks like I had some test prints that decrypted extra data -- > > messing up the AES IV, or at least, so I think. > > Once I removed the extra attempts at decryption, I was able to read > > the packet properly. I also didn't realize that you MUST call > > packet_decrypt_len() to get the size you can decrypt, before you can > > call packet_decrypt(), because multiple encrypted messages can come in > > on one packet. Interestingly, this one packet, in my case, is 440 > > bytes, with two encrypted bits of data in it, with packet lengths of > > 44 bytes and 348 bytes, with paddings of 7 and 18 (in base 10), and > > only one 20 byte HMAC. Well, 23 bytes are the extra after the data and > > the padding, so that means 20 for the HMAC, but I haven't quite > > figured the extra 3 bytes yet. That is for tomorrow! > > > > Thanks much for the help! > > > > -Karl > > > > > > > > On Fri, Oct 9, 2015 at 2:42 PM, Aris Adamantiadis <aris@xxxxxxxxxxxx > > <mailto:aris@xxxxxxxxxxxx>> wrote: > > > > Hi Karl, > > > > It's hard to figure out what you're doing exactly. How are you > > calculating the session keys needed for the interception ? are you > > redoing the diffie-hellman key exchanges with both sides to set up > > different encryption keys ? > > What ciphers are you negotiating ? > > The problem you describe may be related to a padding problem or a > > desync > > in the packet parsing. All ciphers will decrypt to garbage if you > even > > miss a single byte or flip a single bit, with the exception maybe of > > stream cipher modes. > > It seems like you used some small parts of libssh for your > > purpose, you > > may have introduced some unexpected side effect. In all honesty I'm > > surprised you managed to decrypt even the channel opening. > > > > Are you aware that there is no way the public key authentication > > (client > > to server) is going to work ? The session id (being signed by > > client) is > > a derivative of the diffie hellman key exchange. > > > > Regards, > > > > Aris > > > > Le 9/10/15 03:45, Karl Scott a écrit : > > > Hey guys, > > > > > > Encrypted data moving from a client to a server should keep the > same > > > encryption key regardless of if an SSH channel has been opened > > or not, > > > right? And by channel, I mean something created by the > > > ssh_channel_new() function. > > > > > > To explain, I'm working on an SSH proxy of sorts, and so naturally, > > > one of the things I do is: > > > a. See incoming raw encrypted SSH data coming in, wrapped in TCP. > > > b. Decrypt that data after stripping the TCP headers off, using > > > packet_decrypt_len() or packet_decrypt() and providing the length > > > manually (both of these are libssh provided functions, though > > not part > > > of the API). > > > c. Look at the raw unencrypted data, and expect it to be of the > > normal > > > SSH binary format from here: > > https://tools.ietf.org/html/rfc4253#section-6 > > > d. Encrypt the data we were just looking at, and wrap in in the > > > appropriate headers (a modified version of packet_send2 is doing > > this > > > for me wonderfully during testing). > > > > > > This is all working for me, except when it comes time to > > transmit the > > > actual exec command I am trying to use. So, I manage to > successfully > > > open a proxied channel, which indicates that my decryption and > > > encryption logic is working properly. > > > Also, disconnect messages are properly read and transmitted, > > where all > > > sides can see the plaintext, so I am very confident of the logic in > > > steps a. to d. listed above. > > > As one last example, I can clearly see the decrypted ASCII text of > > > certain encrypted traffic that brings us up to this problem point, > > > such as "Zsession" in this decrypted hex traffic: > > > 5A0000000773657373696F6E000000000020000000008000 > > > > > > But when the client sends the encrypted packet which contains the > > > command we want to exec inside of it, I cannot decrypt it -- I just > > > get garbage when I try. It is as if there is some other > > encryption key > > > I need to be using. The function I am using to decrypt is the > > same as > > > listed in step b. The encryption function I use shouldn't matter in > > > this case, since the client is encrypting the message before it > > > reaches my proxy code. > > > > > > Again, this proxy successfully opens the channel, and successfully > > > decrypts and re-encrypts custom disconnected messages. > > > > > > Any help or ideas would be great -- I've spent all day working on > > > this, with no luck! > > > > > > Thank you! > > > > > > -Karl > > > > > > > > > >
Re: Decrypting data within an opened channel? | Karl Scott <karlscottbg@xxxxxxxxx> |
Decrypting data within an opened channel? | Karl Scott <karlscottbg@xxxxxxxxx> |
Re: Decrypting data within an opened channel? | Aris Adamantiadis <aris@xxxxxxxxxxxx> |
Re: Decrypting data within an opened channel? | Karl Scott <karlscottbg@xxxxxxxxx> |
Re: Decrypting data within an opened channel? | Aris Adamantiadis <aris@xxxxxxxxxxxx> |